]> granicus.if.org Git - yasm/commitdiff
Massive update of directive handling, including handling of extern, global,
authorPeter Johnson <peter@tortall.net>
Wed, 21 Mar 2007 04:23:59 +0000 (04:23 -0000)
committerPeter Johnson <peter@tortall.net>
Wed, 21 Mar 2007 04:23:59 +0000 (04:23 -0000)
and common declare.  The latter no longer passes through objfmt at parse time;
instead the objfmt must handle them at output time (objfmt-specific
extensions are parsed & stored by the parser).  Directives are now handled
using a list (with function pointers) rather than a single function entry
point.

svn path=/trunk/yasm/; revision=1819

45 files changed:
frontends/yasm/yasm.c
libyasm/arch.h
libyasm/coretype.h
libyasm/dbgfmt.h
libyasm/hamt.c
libyasm/hamt.h
libyasm/linemap.c
libyasm/objfmt.h
libyasm/section.c
libyasm/section.h
libyasm/symrec.c
libyasm/symrec.h
libyasm/valparam.c
libyasm/valparam.h
modules/arch/x86/x86arch.c
modules/arch/x86/x86arch.h
modules/arch/x86/x86id.c
modules/dbgfmts/codeview/cv-dbgfmt.c
modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c
modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h
modules/dbgfmts/dwarf2/dwarf2-line.c
modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex
modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex
modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn
modules/dbgfmts/null/null-dbgfmt.c
modules/dbgfmts/stabs/stabs-dbgfmt.c
modules/objfmts/bin/bin-objfmt.c
modules/objfmts/coff/coff-objfmt.c
modules/objfmts/coff/win64-except.c
modules/objfmts/dbg/dbg-objfmt.c
modules/objfmts/elf/elf-objfmt.c
modules/objfmts/elf/elf.c
modules/objfmts/elf/elf.h
modules/objfmts/elf/tests/elfmanysym.hex
modules/objfmts/elf/tests/elfvisibility.asm
modules/objfmts/elf/tests/elfvisibility.hex
modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex
modules/objfmts/macho/macho-objfmt.c
modules/objfmts/rdf/rdf-objfmt.c
modules/objfmts/rdf/tests/rdfabs.errwarn
modules/objfmts/xdf/xdf-objfmt.c
modules/parsers/gas/gas-parse.c
modules/parsers/gas/gas-parser.h
modules/parsers/gas/gas-token.re
modules/parsers/nasm/nasm-parse.c

index 4a315bdae7e5340bd7c789a905e07b611d0ff9d0..effe0e99b42623c105c0e1971b24cf5255d6b3f9 100644 (file)
@@ -453,7 +453,7 @@ do_assemble(FILE *in)
     yasm_symtab_parser_finalize(object->symtab,
                                strcmp(cur_parser_module->keyword, "gas")==0 ||
                                strcmp(cur_parser_module->keyword, "gnu")==0,
-                               object, errwarns);
+                               errwarns);
     check_errors(errwarns, object, linemap);
 
     /* Finalize parse */
@@ -604,7 +604,7 @@ main(int argc, char *argv[])
 
     /* Check for arch help */
     if (machine_name && strcmp(machine_name, "help") == 0) {
-       yasm_arch_machine *m = cur_arch_module->machines;
+       const yasm_arch_machine *m = cur_arch_module->machines;
        printf(_("Available %s for %s `%s':\n"), _("machines"),
               _("architecture"), cur_arch_module->keyword);
        while (m->keyword && m->name) {
index 4a12884d78902458ffe0da2e2101980605962b11..6ee9cdd9dd02548395a8643d54978167a5d31031 100644 (file)
@@ -106,6 +106,9 @@ typedef struct yasm_arch_module {
      */
     const char *keyword;
 
+    /** NULL-terminated list of directives.  NULL if none. */
+    /*@null@*/ const yasm_directive *directives;
+
     /** Create architecture.
      * Module-level implementation of yasm_arch_create().
      * Call yasm_arch_create() instead of calling this function.
@@ -133,11 +136,6 @@ typedef struct yasm_arch_module {
      */
     int (*set_var) (yasm_arch *arch, const char *var, unsigned long val);
 
-    /** Module-level implementation of yasm_arch_parse_cpu().
-     * Call yasm_arch_parse_cpu() instead of calling this function.
-     */
-    void (*parse_cpu) (yasm_arch *arch, const char *cpuid, size_t cpuid_len);
-
     /** Module-level implementation of yasm_arch_parse_check_insnprefix().
      * Call yasm_arch_parse_check_insnprefix() instead of calling this function.
      */
@@ -152,14 +150,6 @@ typedef struct yasm_arch_module {
        (yasm_arch *arch, /*@out@*/ uintptr_t *data, const char *id,
         size_t id_len);
 
-    /** Module-level implementation of yasm_arch_parse_directive().
-     * Call yasm_arch_parse_directive() instead of calling this function.
-     */
-    int (*parse_directive) (yasm_arch *arch, const char *name,
-                           /*@null@*/ yasm_valparamhead *valparams,
-                           /*@null@*/ yasm_valparamhead *objext_valparams,
-                           yasm_object *object, unsigned long line);
-
     /** Module-level implementation of yasm_arch_get_fill().
      * Call yasm_arch_get_fill() instead of calling this function.
      */
@@ -219,7 +209,7 @@ typedef struct yasm_arch_module {
      * Call yasm_arch_get_machine() to get the active machine of a particular
      * #yasm_arch.
      */
-    yasm_arch_machine *machines;
+    const yasm_arch_machine *machines;
 
     /** Default machine keyword.
      * Call yasm_arch_get_machine() to get the active machine of a particular
@@ -352,15 +342,6 @@ unsigned int yasm_arch_get_address_size(const yasm_arch *arch);
  */
 int yasm_arch_set_var(yasm_arch *arch, const char *var, unsigned long val);
 
-/** Switch available instructions/registers/etc based on a user-specified
- * CPU identifier.  Should modify behavior ONLY of parse_* functions!  The
- * bytecode and output functions should be able to handle any CPU.
- * \param arch         architecture
- * \param cpuid                cpu identifier as in the input file
- * \param cpuid_len    length of cpu identifier string
- */
-void yasm_arch_parse_cpu(yasm_arch *arch, const char *cpuid, size_t cpuid_len);
-
 /** Check an generic identifier to see if it matches architecture specific
  * names for instructions or instruction prefixes.  Unrecognized identifiers
  * should return #YASM_ARCH_NOTINSNPREFIX so they can be treated as normal
@@ -393,23 +374,6 @@ yasm_arch_regtmod yasm_arch_parse_check_regtmod
     (yasm_arch *arch, /*@out@*/ uintptr_t *data, const char *id,
      size_t id_len);
 
-/** Handle architecture-specific directives.
- * Should modify behavior ONLY of parse functions, much like parse_cpu().
- * \param arch                 architecture
- * \param name                 directive name
- * \param valparams            value/parameters
- * \param objext_valparams     object format extensions
- *                             value/parameters
- * \param object               object
- * \param line                 virtual line (as from yasm_linemap)
- * \return Nonzero if directive was not recognized; 0 if directive was
- *        recognized, even if it wasn't valid.
- */
-int yasm_arch_parse_directive(yasm_arch *arch, const char *name,
-                             /*@null@*/ yasm_valparamhead *valparams,
-                             /*@null@*/ yasm_valparamhead *objext_valparams,
-                             yasm_object *object, unsigned long line);
-
 /** Get NOP fill patterns for 1-15 bytes of fill.
  * \param arch         architecture
  * \return 16-entry array of arrays; [0] is unused, [1] - [15] point to arrays
@@ -542,18 +506,12 @@ yasm_effaddr *yasm_arch_ea_create(yasm_arch *arch, /*@keep@*/ yasm_expr *e);
     ((yasm_arch_base *)arch)->module->get_address_size(arch)
 #define yasm_arch_set_var(arch, var, val) \
     ((yasm_arch_base *)arch)->module->set_var(arch, var, val)
-#define yasm_arch_parse_cpu(arch, cpuid, cpuid_len) \
-    ((yasm_arch_base *)arch)->module->parse_cpu(arch, cpuid, cpuid_len)
 #define yasm_arch_parse_check_insnprefix(arch, data, id, id_len) \
     ((yasm_arch_base *)arch)->module->parse_check_insnprefix(arch, data, id, \
                                                             id_len)
 #define yasm_arch_parse_check_regtmod(arch, data, id, id_len) \
     ((yasm_arch_base *)arch)->module->parse_check_regtmod(arch, data, id, \
                                                          id_len)
-#define yasm_arch_parse_directive(arch, name, valparams, objext_valparams, \
-                                 object, line) \
-    ((yasm_arch_base *)arch)->module->parse_directive \
-       (arch, name, valparams, objext_valparams, object, line)
 #define yasm_arch_get_fill(arch) \
     ((yasm_arch_base *)arch)->module->get_fill(arch)
 #define yasm_arch_finalize_insn(arch, bc, prev_bc, data, num_operands, \
index 3f5e3a79b6455da6d2d6238947445d6b6bcc1e36..b07d8d687d3fa8e65bc2bf1efd64aec30ce1a8f3 100644 (file)
@@ -187,6 +187,10 @@ typedef struct yasm_valparam yasm_valparam;
  * \see valparam.h for related functions.
  */
 typedef struct yasm_valparamhead yasm_valparamhead;
+/** Directive list entry.
+ * \see valparam.h for details and related functions.
+ */
+typedef struct yasm_directive yasm_directive;
 
 /** A list of instruction operands (opaque type).
  * The list goes from left-to-right as parsed.
@@ -232,18 +236,6 @@ typedef enum yasm_expr_op {
     YASM_EXPR_SEGOFF   /**< The ':' in segment:offset. */
 } yasm_expr_op;
 
-/** Symbol record visibility.
- * \see symrec.h for related functions.
- * \note YASM_SYM_EXTERN and YASM_SYM_COMMON are mutually exclusive.
- */
-typedef enum yasm_sym_vis {
-    YASM_SYM_LOCAL = 0,                /**< Default, local only */
-    YASM_SYM_GLOBAL = 1 << 0,  /**< If symbol is declared GLOBAL */
-    YASM_SYM_COMMON = 1 << 1,  /**< If symbol is declared COMMON */
-    YASM_SYM_EXTERN = 1 << 2,  /**< If symbol is declared EXTERN */
-    YASM_SYM_DLOCAL = 1 << 3   /**< If symbol is explicitly declared LOCAL */
-} yasm_sym_vis;
-
 /** Convert yasm_value to its byte representation.  Usually implemented by
  * object formats to keep track of relocations and verify legal expressions.
  * Must put the value into the least significant bits of the destination,
index acf357a6cccd373fb9f7393a3de7903a5e192ab5..021127e7905e5c8c9b1395932e96618707215d7e 100644 (file)
@@ -52,6 +52,9 @@ struct yasm_dbgfmt_module {
     /** Keyword used to select debug format. */
     const char *keyword;
 
+    /** NULL-terminated list of directives.  NULL if none. */
+    /*@null@*/ const yasm_directive *directives;
+
     /** Create debug format.
      * Module-level implementation of yasm_dbgfmt_create().
      * The filenames are provided solely for informational purposes.
@@ -65,13 +68,6 @@ struct yasm_dbgfmt_module {
      */
     void (*destroy) (/*@only@*/ yasm_dbgfmt *dbgfmt);
 
-    /** Module-level implementation of yasm_dbgfmt_directive().
-     * Call yasm_dbgfmt_directive() instead of calling this function.
-     */
-    int (*directive) (yasm_object *object, const char *name,
-                     /*@null@*/ yasm_valparamhead *valparams,
-                     unsigned long line);
-
     /** Module-level implementation of yasm_dbgfmt_generate().
      * Call yasm_dbgfmt_generate() instead of calling this function.
      */
@@ -100,18 +96,6 @@ const char *yasm_dbgfmt_keyword(const yasm_dbgfmt *dbgfmt);
  */
 void yasm_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt);
 
-/** DEBUG directive support.
- * \param object       object
- * \param name         directive name
- * \param valparams    value/parameters
- * \param line         virtual line (from yasm_linemap)
- * \return Nonzero if directive was not recognized; 0 if directive was
- *            recognized even if it wasn't valid.
- */
-int yasm_dbgfmt_directive(yasm_object *object, const char *name,
-                         /*@null@*/ yasm_valparamhead *valparams,
-                         unsigned long line);
-
 /** Generate debugging information bytecodes.
  * \param object       object
  * \param linemap      virtual/physical line mapping
@@ -133,9 +117,6 @@ void yasm_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap,
 
 #define yasm_dbgfmt_destroy(dbgfmt) \
     ((yasm_dbgfmt_base *)dbgfmt)->module->destroy(dbgfmt)
-#define yasm_dbgfmt_directive(object, name, valparams, line) \
-    ((yasm_dbgfmt_base *)((object)->dbgfmt))->module->directive \
-       (object, name, valparams, line)
 #define yasm_dbgfmt_generate(object, linemap, ews) \
     ((yasm_dbgfmt_base *)((object)->dbgfmt))->module->generate \
        (object, linemap, ews)
index 6eee0586dba610625d583440e9f2d17a592d2b4e..c6617b6d9bd5739ac3c6b06c647af5496f970a54 100644 (file)
@@ -33,6 +33,8 @@
 #include "util.h"
 /*@unused@*/ RCSID("$Id$");
 
+#include <ctype.h>
+
 #include "libyasm-stdint.h"
 #include "coretype.h"
 #include "hamt.h"
@@ -53,6 +55,8 @@ struct HAMT {
     HAMTNode *root;
     /*@exits@*/ void (*error_func) (const char *file, unsigned int line,
                                    const char *message);
+    unsigned long (*HashKey) (const char *key);
+    unsigned long (*ReHashKey) (const char *key, int Level);
 };
 
 /* XXX make a portable version of this.  This depends on the pointer being
@@ -92,8 +96,26 @@ ReHashKey(const char *key, int Level)
     return vHash;
 }
 
+static unsigned long
+HashKey_nocase(const char *key)
+{
+    unsigned long a=31415, b=27183, vHash;
+    for (vHash=0; *key; key++, a*=b)
+       vHash = a*vHash + tolower(*key);
+    return vHash;
+}
+
+static unsigned long
+ReHashKey_nocase(const char *key, int Level)
+{
+    unsigned long a=31415, b=27183, vHash;
+    for (vHash=0; *key; key++, a*=b)
+       vHash = a*vHash*(unsigned long)Level + tolower(*key);
+    return vHash;
+}
+
 HAMT *
-HAMT_create(/*@exits@*/ void (*error_func)
+HAMT_create(int nocase, /*@exits@*/ void (*error_func)
     (const char *file, unsigned int line, const char *message))
 {
     /*@out@*/ HAMT *hamt = yasm_xmalloc(sizeof(HAMT));
@@ -108,6 +130,13 @@ HAMT_create(/*@exits@*/ void (*error_func)
     }
 
     hamt->error_func = error_func;
+    if (nocase) {
+       hamt->HashKey = HashKey_nocase;
+       hamt->ReHashKey = ReHashKey_nocase;
+    } else {
+       hamt->HashKey = HashKey;
+       hamt->ReHashKey = ReHashKey;
+    }
 
     return hamt;
 }
@@ -195,7 +224,7 @@ HAMT_insert(HAMT *hamt, const char *str, void *data, int *replace,
     int keypartbits = 0;
     int level = 0;
 
-    key = HashKey(str);
+    key = hamt->HashKey(str);
     keypart = key & 0x1F;
     node = &hamt->root[keypart];
 
@@ -236,9 +265,9 @@ HAMT_insert(HAMT *hamt, const char *str, void *data, int *replace,
                    keypartbits += 5;
                    if (keypartbits > 30) {
                        /* Exceeded 32 bits: rehash */
-                       key = ReHashKey(str, level);
-                       key2 = ReHashKey(((HAMTEntry *)(node->BaseValue))->str,
-                                        level);
+                       key = hamt->ReHashKey(str, level);
+                       key2 = hamt->ReHashKey(
+                           ((HAMTEntry *)(node->BaseValue))->str, level);
                        keypartbits = 0;
                    }
                    keypart = (key >> keypartbits) & 0x1F;
@@ -288,7 +317,7 @@ HAMT_insert(HAMT *hamt, const char *str, void *data, int *replace,
        keypartbits += 5;
        if (keypartbits > 30) {
            /* Exceeded 32 bits of current key: rehash */
-           key = ReHashKey(str, level);
+           key = hamt->ReHashKey(str, level);
            keypartbits = 0;
        }
        keypart = (key >> keypartbits) & 0x1F;
@@ -347,7 +376,7 @@ HAMT_search(HAMT *hamt, const char *str)
     int keypartbits = 0;
     int level = 0;
     
-    key = HashKey(str);
+    key = hamt->HashKey(str);
     keypart = key & 0x1F;
     node = &hamt->root[keypart];
 
@@ -366,7 +395,7 @@ HAMT_search(HAMT *hamt, const char *str)
        keypartbits += 5;
        if (keypartbits > 30) {
            /* Exceeded 32 bits of current key: rehash */
-           key = ReHashKey(str, level);
+           key = hamt->ReHashKey(str, level);
            keypartbits = 0;
        }
        keypart = (key >> keypartbits) & 0x1F;
index 865844caa47e65dbde24fc3df5f51390db03a475..88204eda65e5fdfa955811ad84acef960dca2991 100644 (file)
@@ -41,10 +41,11 @@ typedef struct HAMTEntry HAMTEntry;
 
 /** Create new, empty, HAMT.  error_func() is called when an internal error is
  * encountered--it should NOT return to the calling function.
+ * \param   nocase         nonzero if HAMT should be case-insensitive
  * \param   error_func     function called on internal error
  * \return New, empty, hash array mapped trie.
  */
-HAMT *HAMT_create(/*@exits@*/ void (*error_func)
+HAMT *HAMT_create(int nocase, /*@exits@*/ void (*error_func)
     (const char *file, unsigned int line, const char *message));
 
 /** Delete HAMT and all data associated with it.  Uses deletefunc() to delete
index 08ad385b547f4765bc5e6311af77463abe0a33e4..bf28cb493f6df5e217143de7dd448b4a4fd3f450 100644 (file)
@@ -151,7 +151,7 @@ yasm_linemap_create(void)
     size_t i;
     yasm_linemap *linemap = yasm_xmalloc(sizeof(yasm_linemap));
 
-    linemap->filenames = HAMT_create(yasm_internal_error_);
+    linemap->filenames = HAMT_create(0, yasm_internal_error_);
 
     linemap->current = 1;
 
index 9ada7d2c41d336af80a5c9abb2ba1d4e608b5b7b..ce610b06bb5ca6a4f30900730cce56284688a023 100644 (file)
@@ -74,6 +74,9 @@ struct yasm_objfmt_module {
      */
     const char *default_dbgfmt_keyword;
 
+    /** NULL-terminated list of directives.  NULL if none. */
+    /*@null@*/ const yasm_directive *directives;
+
     /** Create object format.
      * Module-level implementation of yasm_objfmt_create().
      * Call yasm_objfmt_create() instead of calling this function.
@@ -106,35 +109,6 @@ struct yasm_objfmt_module {
        (*section_switch)(yasm_object *object, yasm_valparamhead *valparams,
                          /*@null@*/ yasm_valparamhead *objext_valparams,
                          unsigned long line);
-
-    /** Module-level implementation of yasm_objfmt_extern_declare().
-     * Call yasm_objfmt_extern_declare() instead of calling this function.
-     */
-    yasm_symrec * (*extern_declare)
-       (yasm_object *object, const char *name,
-        /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-    /** Module-level implementation of yasm_objfmt_global_declare().
-     * Call yasm_objfmt_global_declare() instead of calling this function.
-     */
-    yasm_symrec * (*global_declare)
-       (yasm_object *object, const char *name,
-        /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-    /** Module-level implementation of yasm_objfmt_common_declare().
-     * Call yasm_objfmt_common_declare() instead of calling this function.
-     */
-    yasm_symrec * (*common_declare)
-       (yasm_object *object, const char *name, /*@only@*/ yasm_expr *size,
-        /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-    /** Module-level implementation of yasm_objfmt_directive().
-     * Call yasm_objfmt_directive() instead of calling this function.
-     */
-    int (*directive) (yasm_object *object, const char *name,
-                     /*@null@*/ yasm_valparamhead *valparams,
-                     /*@null@*/ yasm_valparamhead *objext_valparams,
-                     unsigned long line);
 };
 
 /** Create object format.
@@ -182,58 +156,6 @@ yasm_section *yasm_objfmt_add_default_section(yasm_object *object);
     (yasm_object *object, yasm_valparamhead *valparams,
      /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
 
-/** Declare an "extern" (importing from another module) symbol.  Should
- * call yasm_symtab_declare().
- * \param object               object
- * \param name                 symbol name
- * \param objext_valparams     object format-specific value/paramaters
- * \param line                 virtual line (from yasm_linemap)
- * \return Declared symbol.
- */
-yasm_symrec *yasm_objfmt_extern_declare
-    (yasm_object *object, const char *name,
-     /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-/** Declare a "global" (exporting to other modules) symbol.  Should call
- * yasm_symtab_declare().
- * \param object               object
- * \param name                 symbol name
- * \param objext_valparams     object format-specific value/paramaters
- * \param line                 virtual line (from yasm_linemap)
- * \return Declared symbol.
- */
-yasm_symrec *yasm_objfmt_global_declare
-    (yasm_object *object, const char *name,
-     /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-/** Declare a "common" (shared space with other modules) symbol.  Should
- * call yasm_symtab_declare().
- * declaration.
- * \param object               object
- * \param name                 symbol name
- * \param size                 common data size
- * \param objext_valparams     object format-specific value/paramaters
- * \param line                 virtual line (from yasm_linemap)
- * \return Declared symbol.
- */
-yasm_symrec *yasm_objfmt_common_declare
-    (yasm_object *object, const char *name, /*@only@*/ yasm_expr *size,
-     /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line);
-
-/** Handle object format-specific directives.
- * \param object               object
- * \param name                 directive name
- * \param valparams            value/parameters
- * \param objext_valparams     object format-specific value/parameters
- * \param line                 virtual line (from yasm_linemap)
- * \return Nonzero if directive was not recognized; 0 if directive was
- *         recognized, even if it wasn't valid.
- */
-int yasm_objfmt_directive(yasm_object *object, const char *name,
-                         /*@null@*/ yasm_valparamhead *valparams,
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line);
-
 #ifndef YASM_DOXYGEN
 
 /* Inline macro implementations for objfmt functions */
@@ -248,18 +170,6 @@ int yasm_objfmt_directive(yasm_object *object, const char *name,
 #define yasm_objfmt_section_switch(object, vpms, oe_vpms, line) \
     ((yasm_objfmt_base *)((object)->objfmt))->module->section_switch \
        (object, vpms, oe_vpms, line)
-#define yasm_objfmt_extern_declare(object, name, oe_vpms, line) \
-    ((yasm_objfmt_base *)((object)->objfmt))->module->extern_declare \
-       (object, name, oe_vpms, line)
-#define yasm_objfmt_global_declare(object, name, oe_vpms, line) \
-    ((yasm_objfmt_base *)((object)->objfmt))->module->global_declare \
-       (object, name, oe_vpms, line)
-#define yasm_objfmt_common_declare(object, name, size, oe_vpms, line) \
-    ((yasm_objfmt_base *)((object)->objfmt))->module->common_declare \
-       (object, name, size, oe_vpms, line)
-#define yasm_objfmt_directive(object, name, vpms, oe_vpms, line) \
-    ((yasm_objfmt_base *)((object)->objfmt))->module->directive \
-       (object, name, vpms, oe_vpms, line)
 #define yasm_objfmt_add_default_section(object) \
     ((yasm_objfmt_base *)((object)->objfmt))->module->add_default_section \
        (object)
index 812218ac64fc8b7a31bc8880808b1865e605f6c9..02b6741d5bae2558a2b84ba1e58a4d3cee450729 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "libyasm-stdint.h"
 #include "coretype.h"
+#include "hamt.h"
 #include "valparam.h"
 #include "assocdat.h"
 
@@ -101,6 +102,130 @@ struct yasm_section {
 
 static void yasm_section_destroy(/*@only@*/ yasm_section *sect);
 
+/* Wrapper around directive for HAMT insertion */
+typedef struct yasm_directive_wrap {
+    const yasm_directive *directive;
+} yasm_directive_wrap;
+
+/*
+ * Standard "builtin" object directives.
+ */
+
+static void
+dir_extern(yasm_object *object, yasm_valparamhead *valparams,
+          yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp = yasm_vps_first(valparams);
+    yasm_symrec *sym;
+    sym = yasm_symtab_declare(object->symtab, vp->val, YASM_SYM_EXTERN, line);
+    if (objext_valparams) {
+       yasm_valparamhead *vps = yasm_vps_create();
+       *vps = *objext_valparams;   /* structure copy */
+       yasm_vps_initialize(objext_valparams);  /* don't double-free */
+       yasm_symrec_set_objext_valparams(sym, vps);
+    }
+}
+
+static void
+dir_global(yasm_object *object, yasm_valparamhead *valparams,
+          yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp = yasm_vps_first(valparams);
+    yasm_symrec *sym;
+    sym = yasm_symtab_declare(object->symtab, vp->val, YASM_SYM_GLOBAL, line);
+    if (objext_valparams) {
+       yasm_valparamhead *vps = yasm_vps_create();
+       *vps = *objext_valparams;   /* structure copy */
+       yasm_vps_initialize(objext_valparams);  /* don't double-free */
+       yasm_symrec_set_objext_valparams(sym, vps);
+    }
+}
+
+static void
+dir_common(yasm_object *object, yasm_valparamhead *valparams,
+          yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp = yasm_vps_first(valparams);
+    yasm_valparam *vp2 = yasm_vps_next(vp);
+    yasm_expr *size = yasm_vp_expr(vp2, object->symtab, line);
+    yasm_symrec *sym;
+
+    if (!size) {
+       yasm_error_set(YASM_ERROR_SYNTAX,
+                      N_("no size specified in %s declaration"), "COMMON");
+       return;
+    }
+    sym = yasm_symtab_declare(object->symtab, vp->val, YASM_SYM_COMMON, line);
+    yasm_symrec_set_common_size(sym, size);
+    if (objext_valparams) {
+       yasm_valparamhead *vps = yasm_vps_create();
+       *vps = *objext_valparams;   /* structure copy */
+       yasm_vps_initialize(objext_valparams);  /* don't double-free */
+       yasm_symrec_set_objext_valparams(sym, vps);
+    }
+}
+
+static void
+dir_section(yasm_object *object, yasm_valparamhead *valparams,
+           yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_section *new_section =
+       yasm_objfmt_section_switch(object, valparams, objext_valparams, line);
+    if (new_section)
+       object->cur_section = new_section;
+    else
+       yasm_error_set(YASM_ERROR_SYNTAX,
+                      N_("invalid argument to directive `%s'"), "SECTION");
+}
+
+static const yasm_directive object_directives[] = {
+    { ".extern",       "gas",  dir_extern,     YASM_DIR_ID_REQUIRED },
+    { ".global",       "gas",  dir_global,     YASM_DIR_ID_REQUIRED },
+    { ".globl",                "gas",  dir_global,     YASM_DIR_ID_REQUIRED },
+    { "extern",                "nasm", dir_extern,     YASM_DIR_ID_REQUIRED },
+    { "global",                "nasm", dir_global,     YASM_DIR_ID_REQUIRED },
+    { "common",                "nasm", dir_common,     YASM_DIR_ID_REQUIRED },
+    { "section",       "nasm", dir_section,    YASM_DIR_ARG_REQUIRED },
+    { "segment",       "nasm", dir_section,    YASM_DIR_ARG_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
+
+static void
+directive_level2_delete(/*@only@*/ void *data)
+{
+    yasm_xfree(data);
+}
+
+static void
+directive_level1_delete(/*@only@*/ void *data)
+{
+    HAMT_destroy(data, directive_level2_delete);
+}
+
+static void
+directives_add(yasm_object *object, /*@null@*/ const yasm_directive *dir)
+{
+    if (!dir)
+       return;
+
+    while (dir->name) {
+       HAMT *level2 = HAMT_search(object->directives, dir->parser);
+       int replace;
+       yasm_directive_wrap *wrap = yasm_xmalloc(sizeof(yasm_directive_wrap));
+
+       if (!level2) {
+           replace = 0;
+           level2 = HAMT_insert(object->directives, dir->parser,
+                                HAMT_create(1, yasm_internal_error_),
+                                &replace, directive_level1_delete);
+       }
+       replace = 0;
+       wrap->directive = dir;
+       HAMT_insert(level2, dir->name, wrap, &replace,
+                   directive_level2_delete);
+       dir++;
+    }
+}
 
 /*@-compdestroy@*/
 yasm_object *
@@ -121,6 +246,9 @@ yasm_object_create(const char *src_filename, const char *obj_filename,
     /* Initialize sections linked list */
     STAILQ_INIT(&object->sections);
 
+    /* Create directives HAMT */
+    object->directives = HAMT_create(1, yasm_internal_error_);
+
     /* Initialize the target architecture */
     object->arch = arch;
 
@@ -167,6 +295,15 @@ yasm_object_create(const char *src_filename, const char *obj_filename,
        goto error;
     }
 
+    /* Add directives to HAMT.  Note ordering here determines priority. */
+    directives_add(object,
+                  ((yasm_objfmt_base *)object->objfmt)->module->directives);
+    directives_add(object,
+                  ((yasm_dbgfmt_base *)object->dbgfmt)->module->directives);
+    directives_add(object,
+                  ((yasm_arch_base *)object->arch)->module->directives);
+    directives_add(object, object_directives);
+
     return object;
 
 error:
@@ -274,6 +411,28 @@ yasm_object_create_absolute(yasm_object *object, yasm_expr *start,
 }
 /*@=onlytrans@*/
 
+int
+yasm_object_directive(yasm_object *object, const char *name,
+                     const char *parser, yasm_valparamhead *valparams,
+                     yasm_valparamhead *objext_valparams,
+                     unsigned long line)
+{
+    HAMT *level2;
+    yasm_directive_wrap *wrap;
+
+    level2 = HAMT_search(object->directives, parser);
+    if (!level2)
+       return 1;
+
+    wrap = HAMT_search(level2, name);
+    if (!wrap)
+       return 1;
+
+    yasm_call_directive(wrap->directive, object, valparams, objext_valparams,
+                       line);
+    return 0;
+}
+
 void
 yasm_object_set_source_fn(yasm_object *object, const char *src_filename)
 {
@@ -358,6 +517,9 @@ yasm_object_destroy(yasm_object *object)
        cur = next;
     }
 
+    /* Delete directives HAMT */
+    HAMT_destroy(object->directives, directive_level1_delete);
+
     /* Delete associated filenames */
     yasm_xfree(object->src_filename);
     yasm_xfree(object->obj_filename);
index 07db95ffff02d867992710f4d443b749c20c8f1f..1b1b18f36dfa8326205a586cf79f521c8b7744d1 100644 (file)
@@ -61,7 +61,13 @@ struct yasm_object {
     /*@dependent@*/ yasm_section *cur_section;
 
 #ifdef YASM_LIB_INTERNAL
+    /** Linked list of sections. */
     /*@reldef@*/ STAILQ_HEAD(yasm_sectionhead, yasm_section) sections;
+
+    /** Directives, organized as two level HAMT; first level is parser,
+     * second level is directive name.
+     */
+    /*@owned@*/ struct HAMT *directives;
 #endif
 };
 
@@ -112,6 +118,21 @@ struct yasm_object {
 /*@dependent@*/ yasm_section *yasm_object_create_absolute
     (yasm_object *object, /*@keep@*/ yasm_expr *start, unsigned long line);
 
+/** Handle a directive.  Passed down to object format, debug format, or
+ * architecture as appropriate.
+ * \param object               object
+ * \param name                 directive name
+ * \param parser               parser keyword
+ * \param valparams            value/parameters
+ * \param objext_valparams     "object format-specific" value/parameters
+ * \param line                 virtual line (from yasm_linemap)
+ * \return 0 if directive recognized, nonzero if unrecognized.
+ */
+int yasm_object_directive(yasm_object *object, const char *name,
+                         const char *parser, yasm_valparamhead *valparams,
+                         yasm_valparamhead *objext_valparams,
+                         unsigned long line);
+
 /** Delete (free allocated memory for) an object.  All sections in the
  * object and all bytecodes within those sections are also deleted.
  * \param object       object
index 1b8e72198ecfd8490809af756650d6a25ac564bd..30b6c91f506564a92037909d6e41ceb4bb9fb559 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "libyasm-stdint.h"
 #include "coretype.h"
+#include "valparam.h"
 #include "hamt.h"
 #include "assocdat.h"
 
@@ -64,7 +65,9 @@ struct yasm_symrec {
     sym_type type;
     yasm_sym_status status;
     yasm_sym_vis visibility;
-    unsigned long line;                /*  symbol was first declared or used on */
+    unsigned long def_line;    /* line where symbol was first defined */
+    unsigned long decl_line;   /* line where symbol was first declared */
+    unsigned long use_line;    /* line where symbol was first used */
     union {
        yasm_expr *expn;        /* equ value */
 
@@ -89,12 +92,48 @@ struct yasm_symtab {
     SLIST_HEAD(nontablesymhead_s, non_table_symrec_s) non_table_syms;
 };
 
+static void
+objext_valparams_destroy(void *data)
+{
+    yasm_vps_destroy((yasm_valparamhead *)data);
+}
+
+static void
+objext_valparams_print(void *data, FILE *f, int indent_level)
+{
+    yasm_vps_print((yasm_valparamhead *)data, f);
+}
+
+static yasm_assoc_data_callback objext_valparams_cb = {
+    objext_valparams_destroy,
+    objext_valparams_print
+};
+
+static void
+common_size_destroy(void *data)
+{
+    yasm_expr **e = (yasm_expr **)data;
+    yasm_expr_destroy(*e);
+    yasm_xfree(data);
+}
+
+static void
+common_size_print(void *data, FILE *f, int indent_level)
+{
+    yasm_expr **e = (yasm_expr **)data;
+    yasm_expr_print(*e, f);
+}
+
+static yasm_assoc_data_callback common_size_cb = {
+    common_size_destroy,
+    common_size_print
+};
 
 yasm_symtab *
 yasm_symtab_create(void)
 {
     yasm_symtab *symtab = yasm_xmalloc(sizeof(yasm_symtab));
-    symtab->sym_table = HAMT_create(yasm_internal_error_);
+    symtab->sym_table = HAMT_create(0, yasm_internal_error_);
     SLIST_INIT(&symtab->non_table_syms);
     return symtab;
 }
@@ -116,7 +155,9 @@ symrec_new_common(/*@keep@*/ char *name)
     yasm_symrec *rec = yasm_xmalloc(sizeof(yasm_symrec));
     rec->name = name;
     rec->type = SYM_UNKNOWN;
-    rec->line = 0;
+    rec->def_line = 0;
+    rec->decl_line = 0;
+    rec->use_line = 0;
     rec->visibility = YASM_SYM_LOCAL;
     rec->assoc_data = NULL;
     return rec;
@@ -190,7 +231,9 @@ yasm_symrec *
 yasm_symtab_abs_sym(yasm_symtab *symtab)
 {
     yasm_symrec *rec = symtab_get_or_new(symtab, "", 1);
-    rec->line = 0;
+    rec->def_line = 0;
+    rec->decl_line = 0;
+    rec->use_line = 0;
     rec->type = SYM_EQU;
     rec->value.expn =
        yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), 0);
@@ -202,8 +245,8 @@ yasm_symrec *
 yasm_symtab_use(yasm_symtab *symtab, const char *name, unsigned long line)
 {
     yasm_symrec *rec = symtab_get_or_new(symtab, name, 1);
-    if (rec->line == 0)
-       rec->line = line;       /* set line number of first use */
+    if (rec->use_line == 0)
+       rec->use_line = line;   /* set line number of first use */
     rec->status |= YASM_SYM_USED;
     return rec;
 }
@@ -222,15 +265,15 @@ symtab_define(yasm_symtab *symtab, const char *name, sym_type type,
 
     /* Has it been defined before (either by DEFINED or COMMON/EXTERN)? */
     if (rec->status & YASM_SYM_DEFINED) {
-       yasm_error_set_xref(rec->line, N_("`%s' previously defined here"),
-                           name);
+       yasm_error_set_xref(rec->def_line!=0 ? rec->def_line : rec->decl_line,
+                           N_("`%s' previously defined here"), name);
        yasm_error_set(YASM_ERROR_GENERAL, N_("redefinition of `%s'"),
                       name);
     } else {
        if (rec->visibility & YASM_SYM_EXTERN)
            yasm_warn_set(YASM_WARN_GENERAL,
                          N_("`%s' both defined and declared extern"), name);
-       rec->line = line;       /* set line number of definition */
+       rec->def_line = line;   /* set line number of definition */
        rec->type = type;
        rec->status |= YASM_SYM_DEFINED;
     }
@@ -313,18 +356,18 @@ yasm_symrec_declare(yasm_symrec *rec, yasm_sym_vis vis, unsigned long line)
        (!(rec->status & YASM_SYM_DEFINED) &&
         (!(rec->visibility & (YASM_SYM_COMMON | YASM_SYM_EXTERN)) ||
          ((rec->visibility & YASM_SYM_COMMON) && (vis == YASM_SYM_COMMON)) ||
-         ((rec->visibility & YASM_SYM_EXTERN) && (vis == YASM_SYM_EXTERN)))))
+         ((rec->visibility & YASM_SYM_EXTERN) && (vis == YASM_SYM_EXTERN))))) {
+       rec->decl_line = line;
        rec->visibility |= vis;
-    else
+    else
        yasm_error_set(YASM_ERROR_GENERAL,
            N_("duplicate definition of `%s'; first defined on line %lu"),
-           rec->name, rec->line);
+           rec->name, rec->def_line!=0 ? rec->def_line : rec->decl_line);
 }
 
 typedef struct symtab_finalize_info {
     unsigned long firstundef_line;
     int undef_extern;
-    /*@null@*/ yasm_object *object;
     yasm_errwarns *errwarns;
 } symtab_finalize_info;
 
@@ -337,14 +380,14 @@ symtab_parser_finalize_checksym(yasm_symrec *sym, /*@null@*/ void *d)
     /* error if a symbol is used but never defined or extern/common declared */
     if ((sym->status & YASM_SYM_USED) && !(sym->status & YASM_SYM_DEFINED) &&
        !(sym->visibility & (YASM_SYM_EXTERN | YASM_SYM_COMMON))) {
-       if (info->undef_extern && info->object)
-           yasm_objfmt_extern_declare(info->object, sym->name, NULL, 1);
+       if (info->undef_extern)
+           sym->visibility |= YASM_SYM_EXTERN;
        else {
            yasm_error_set(YASM_ERROR_GENERAL,
                           N_("undefined symbol `%s' (first use)"), sym->name);
-           yasm_errwarn_propagate(info->errwarns, sym->line);
-           if (sym->line < info->firstundef_line)
-               info->firstundef_line = sym->line;
+           yasm_errwarn_propagate(info->errwarns, sym->use_line);
+           if (sym->use_line < info->firstundef_line)
+               info->firstundef_line = sym->use_line;
        }
     }
 
@@ -361,10 +404,10 @@ symtab_parser_finalize_checksym(yasm_symrec *sym, /*@null@*/ void *d)
            yasm_expr_create(YASM_EXPR_SUB,
                             yasm_expr_precbc(sym->value.precbc),
                             yasm_expr_precbc(yasm_section_bcs_first(sect)),
-                            sym->line),
+                            sym->def_line),
            YASM_EXPR_ADD,
            yasm_expr_copy(yasm_section_get_start(sect)),
-           sym->line);
+           sym->def_line);
        sym->status |= YASM_SYM_VALUED;
     }
 
@@ -373,12 +416,11 @@ symtab_parser_finalize_checksym(yasm_symrec *sym, /*@null@*/ void *d)
 
 void
 yasm_symtab_parser_finalize(yasm_symtab *symtab, int undef_extern,
-                           yasm_object *object, yasm_errwarns *errwarns)
+                           yasm_errwarns *errwarns)
 {
     symtab_finalize_info info;
     info.firstundef_line = ULONG_MAX;
     info.undef_extern = undef_extern;
-    info.object = object;
     info.errwarns = errwarns;
     yasm_symtab_traverse(symtab, &info, symtab_parser_finalize_checksym);
     if (info.firstundef_line < ULONG_MAX) {
@@ -448,9 +490,21 @@ yasm_symrec_get_status(const yasm_symrec *sym)
 }
 
 unsigned long
-yasm_symrec_get_line(const yasm_symrec *sym)
+yasm_symrec_get_def_line(const yasm_symrec *sym)
+{
+    return sym->def_line;
+}
+
+unsigned long
+yasm_symrec_get_decl_line(const yasm_symrec *sym)
 {
-    return sym->line;
+    return sym->decl_line;
+}
+
+unsigned long
+yasm_symrec_get_use_line(const yasm_symrec *sym)
+{
+    return sym->use_line;
 }
 
 const yasm_expr *
@@ -477,7 +531,8 @@ yasm_symrec_get_label(const yasm_symrec *sym,
 int
 yasm_symrec_is_abs(const yasm_symrec *sym)
 {
-    return (sym->line == 0 && sym->type == SYM_EQU && sym->name[0] == '\0');
+    return (sym->def_line == 0 && sym->type == SYM_EQU &&
+           sym->name[0] == '\0');
 }
 
 int
@@ -492,6 +547,34 @@ yasm_symrec_is_curpos(const yasm_symrec *sym)
     return (sym->type == SYM_CURPOS);
 }
 
+void
+yasm_symrec_set_objext_valparams(yasm_symrec *sym,
+                                /*@only@*/ yasm_valparamhead *objext_valparams)
+{
+    yasm_symrec_add_data(sym, &objext_valparams_cb, objext_valparams);
+}
+
+yasm_valparamhead *
+yasm_symrec_get_objext_valparams(yasm_symrec *sym)
+{
+    return yasm_symrec_get_data(sym, &objext_valparams_cb);
+}
+
+void
+yasm_symrec_set_common_size(yasm_symrec *sym,
+                           /*@only@*/ yasm_expr *common_size)
+{
+    yasm_expr **ep = yasm_xmalloc(sizeof(yasm_expr *));
+    *ep = common_size;
+    yasm_symrec_add_data(sym, &common_size_cb, ep);
+}
+
+yasm_expr **
+yasm_symrec_get_common_size(yasm_symrec *sym)
+{
+    return (yasm_expr **)yasm_symrec_get_data(sym, &common_size_cb);
+}
+
 void *
 yasm_symrec_get_data(yasm_symrec *sym,
                     const yasm_assoc_data_callback *callback)
@@ -570,5 +653,9 @@ yasm_symrec_print(const yasm_symrec *sym, FILE *f, int indent_level)
        yasm__assoc_data_print(sym->assoc_data, f, indent_level+1);
     }
 
-    fprintf(f, "%*sLine Index=%lu\n", indent_level, "", sym->line);
+    fprintf(f, "%*sLine Index (Defined)=%lu\n", indent_level, "",
+           sym->def_line);
+    fprintf(f, "%*sLine Index (Declared)=%lu\n", indent_level, "",
+           sym->decl_line);
+    fprintf(f, "%*sLine Index (Used)=%lu\n", indent_level, "", sym->use_line);
 }
index 6cf97559c4c9f068b8ad1d16e8c8a0c191acf3ef..624a3e98df362f1e2bd57eb515fe03e714792a39 100644 (file)
@@ -46,6 +46,16 @@ typedef enum yasm_sym_status {
     YASM_SYM_NOTINTABLE = 1 << 3    /**< if it's not in sym_table (ex. '$') */
 } yasm_sym_status;
 
+/** Symbol record visibility.
+ * \note YASM_SYM_EXTERN and YASM_SYM_COMMON are mutually exclusive.
+ */
+typedef enum yasm_sym_vis {
+    YASM_SYM_LOCAL = 0,                /**< Default, local only */
+    YASM_SYM_GLOBAL = 1 << 0,  /**< If symbol is declared GLOBAL */
+    YASM_SYM_COMMON = 1 << 1,  /**< If symbol is declared COMMON */
+    YASM_SYM_EXTERN = 1 << 2,  /**< If symbol is declared EXTERN */
+    YASM_SYM_DLOCAL = 1 << 3   /**< If symbol is explicitly declared LOCAL */
+} yasm_sym_vis;
 
 /** Create a new symbol table. */
 yasm_symtab *yasm_symtab_create(void);
@@ -202,13 +212,10 @@ yasm_symrec *yasm_symtab_iter_value(const yasm_symtab_iter *cur);
  * used but never defined or declared #YASM_SYM_EXTERN or #YASM_SYM_COMMON.
  * \param symtab       symbol table
  * \param undef_extern if nonzero, all undef syms should be declared extern
- * \param object       object to notify about new extern decls
- *                     (may be NULL if undef_extern is 0)
  * \param errwarns     error/warning set
  * \note Errors/warnings are stored into errwarns.
  */
 void yasm_symtab_parser_finalize(yasm_symtab *symtab, int undef_extern,
-                                /*@null@*/ yasm_object *object,
                                 yasm_errwarns *errwarns);
 
 /** Print the symbol table.  For debugging purposes.
@@ -236,11 +243,23 @@ yasm_sym_vis yasm_symrec_get_visibility(const yasm_symrec *sym);
  */
 yasm_sym_status yasm_symrec_get_status(const yasm_symrec *sym);
 
-/** Get the virtual line of a symbol (where it was first declared or used).
+/** Get the virtual line of where a symbol was first defined.
+ * \param sym      symbol
+ * \return line            virtual line
+ */
+unsigned long yasm_symrec_get_def_line(const yasm_symrec *sym);
+
+/** Get the virtual line of where a symbol was first declared.
  * \param sym      symbol
  * \return line            virtual line
  */
-unsigned long yasm_symrec_get_line(const yasm_symrec *sym);
+unsigned long yasm_symrec_get_decl_line(const yasm_symrec *sym);
+
+/** Get the virtual line of where a symbol was first used.
+ * \param sym      symbol
+ * \return line            virtual line
+ */
+unsigned long yasm_symrec_get_use_line(const yasm_symrec *sym);
 
 /** Get EQU value of a symbol.
  * \param sym      symbol
@@ -280,6 +299,36 @@ int yasm_symrec_is_special(const yasm_symrec *sym);
  */
 int yasm_symrec_is_curpos(const yasm_symrec *sym);
 
+/** Set object-extended valparams.
+ * \param sym                  symbol
+ * \param objext_valparams     object-extended valparams
+ */
+void yasm_symrec_set_objext_valparams
+    (yasm_symrec *sym, /*@only@*/ yasm_valparamhead *objext_valparams);
+
+/** Get object-extended valparams, if any, associated with symbol's
+ * declaration.
+ * \param sym      symbol
+ * \return Object-extended valparams (NULL if none).
+ */
+/*@null@*/ /*@dependent@*/ yasm_valparamhead *yasm_symrec_get_objext_valparams
+    (yasm_symrec *sym);
+
+/** Set common size of symbol.
+ * \param sym          symbol
+ * \param common_size  common size expression
+ */
+void yasm_symrec_set_common_size
+    (yasm_symrec *sym, /*@only@*/ yasm_expr *common_size);
+
+/** Get common size of symbol, if symbol is declared COMMON and a size was set
+ * for it.
+ * \param sym      symbol
+ * \return Common size (NULL if none).
+ */
+/*@dependent@*/ /*@null@*/ yasm_expr **yasm_symrec_get_common_size
+    (yasm_symrec *sym);
+
 /** Get associated data for a symbol and data callback.
  * \param sym      symbol
  * \param callback  callback used when adding data
index 7513b148f78cba4dd64a62f451b123c519e8025f..ee3acd5476fb215ea23188a503b608a7e8aa368c 100644 (file)
 #include "coretype.h"
 #include "valparam.h"
 
+#include "errwarn.h"
 #include "expr.h"
+#include "symrec.h"
 
 
+void
+yasm_call_directive(const yasm_directive *directive, yasm_object *object,
+                   yasm_valparamhead *valparams,
+                   yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp;
+
+    if ((directive->flags & (YASM_DIR_ARG_REQUIRED|YASM_DIR_ID_REQUIRED)) &&
+       (!valparams || !yasm_vps_first(valparams))) {
+       yasm_error_set(YASM_ERROR_SYNTAX,
+                      N_("directive `%s' requires an argument"),
+                      directive->name);
+       return;
+    }
+    if (valparams) {
+       vp = yasm_vps_first(valparams);
+       if ((directive->flags & YASM_DIR_ID_REQUIRED) && !vp->val) {
+           yasm_error_set(YASM_ERROR_SYNTAX,
+               N_("directive `%s' requires an identifier parameter"),
+               directive->name);
+           return;
+       }
+    }
+    directive->handler(object, valparams, objext_valparams, line);
+}
+
 yasm_valparam *
 yasm_vp_create(/*@keep@*/ char *v, /*@keep@*/ yasm_expr *p)
 {
@@ -44,6 +72,22 @@ yasm_vp_create(/*@keep@*/ char *v, /*@keep@*/ yasm_expr *p)
     return r;
 }
 
+/*@null@*/ /*@only@*/ yasm_expr *
+yasm_vp_expr(yasm_valparam *vp, yasm_symtab *symtab, unsigned long line)
+{
+    if (!vp)
+       return NULL;
+    if (vp->val) {
+       return yasm_expr_create_ident(yasm_expr_sym(
+           yasm_symtab_use(symtab, vp->val, line)), line);
+    } else if (vp->param) {
+       yasm_expr *e = vp->param;
+       vp->param = NULL;   /* to avoid double-free */
+       return e;
+    } else
+       return NULL;
+}
+
 void
 yasm_vps_delete(yasm_valparamhead *headp)
 {
index eef1989a7a4dc47865ffa40827d60d64c8fb32e2..a288d052f470557a416267bf9f85d600cb21574c 100644 (file)
@@ -46,6 +46,47 @@ struct yasm_valparam {
 /*@reldef@*/ STAILQ_HEAD(yasm_valparamhead, yasm_valparam);
 #endif
 
+/** Directive list entry structure. */
+struct yasm_directive {
+    /** Directive name.  GAS directives should include the ".", NASM
+     * directives should just be the raw name (not including the []).
+     * NULL entry required to terminate list of directives.
+     */
+    /*@null@*/ const char *name;
+
+    const char *parser;                            /**< Parser keyword */
+
+    /** Handler callback function for the directive.
+     * \param object           object 
+     * \param valparams                value/parameters
+     * \param objext_valparams object format-specific value/parameters
+     * \param line             virtual line (from yasm_linemap)
+     */
+    void (*handler) (yasm_object *object, yasm_valparamhead *valparams,
+                    yasm_valparamhead *objext_valparams, unsigned long line);
+
+    /* Flags for pre-handler parameter checking. */
+    enum yasm_directive_flags {
+       YASM_DIR_ANY = 0,           /**< Any valparams accepted */
+       YASM_DIR_ARG_REQUIRED = 1,  /**< Require at least 1 valparam */
+       YASM_DIR_ID_REQUIRED = 2    /**< First valparam must be ID */
+    } flags;
+};
+
+/** Call a directive.  Performs any valparam checks asked for by the
+ * directive prior to call.  Note that for a variety of reasons, a directive
+ * can generate an error.
+ * \param directive            directive
+ * \param object               object 
+ * \param valparams            value/parameters
+ * \param objext_valparams     object format-specific value/parameters
+ * \param line                 virtual line (from yasm_linemap)
+ */
+void yasm_call_directive(const yasm_directive *directive, yasm_object *object,
+                        yasm_valparamhead *valparams,
+                        yasm_valparamhead *objext_valparams,
+                        unsigned long line);
+
 /** Create a new valparam.
  * \param v    value
  * \param p    parameter
@@ -53,6 +94,17 @@ struct yasm_valparam {
  */
 yasm_valparam *yasm_vp_create(/*@keep@*/ char *v, /*@keep@*/ yasm_expr *p);
 
+/** Get a valparam as an expr.  If the valparam is a value, it's treated
+ * as a symbol (yasm_symtab_use() is called to convert it).  The valparam
+ * is modified as necessary to avoid double-frees.
+ * \param vp           valparam
+ * \param symtab       symbol table
+ * \param line         virtual line
+ * \return Expression, or NULL if vp is NULL or if val and param are both NULL.
+ */
+/*@null@*/ /*@only@*/ yasm_expr *yasm_vp_expr
+    (yasm_valparam *vp, yasm_symtab *symtab, unsigned long line);
+
 /** Create a new linked list of valparams.
  * \return Newly allocated valparam list.
  */
index 645c0b982de0cbe3cedaae94ec8fd5ae657e4ab3..387c7e5daaf5da14d42824e364c3f4db617f6708 100644 (file)
@@ -118,35 +118,72 @@ x86_set_var(yasm_arch *arch, const char *var, unsigned long val)
     return 0;
 }
 
-static int
-x86_parse_directive(yasm_arch *arch, const char *name,
-                   /*@null@*/ yasm_valparamhead *valparams,
-                   /*@unused@*/ /*@null@*/
-                   yasm_valparamhead *objext_valparams,
-                   /*@unused@*/ yasm_object *object,
-                   /*@unused@*/ unsigned long line)
+static void
+x86_dir_cpu(yasm_object *object, yasm_valparamhead *valparams,
+           yasm_valparamhead *objext_valparams, unsigned long line)
 {
-    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch;
+    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch;
+
+    yasm_valparam *vp;
+    yasm_vps_foreach(vp, valparams) {
+       if (vp->val)
+           yasm_x86__parse_cpu(arch_x86, vp->val, strlen(vp->val));
+       else if (vp->param) {
+           const yasm_intnum *intcpu;
+           intcpu = yasm_expr_get_intnum(&vp->param, 0);
+           if (!intcpu)
+               yasm_error_set(YASM_ERROR_SYNTAX,
+                              N_("invalid argument to [%s]"), "CPU");
+           else {
+               char strcpu[16];
+               sprintf(strcpu, "%lu", yasm_intnum_get_uint(intcpu));
+               yasm_x86__parse_cpu(arch_x86, strcpu, strlen(strcpu));
+           }
+       }
+    }
+}
+
+static void
+x86_dir_bits(yasm_object *object, yasm_valparamhead *valparams,
+            yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch;
     yasm_valparam *vp;
     const yasm_intnum *intn;
     long lval;
 
-    if (yasm__strcasecmp(name, "bits") == 0) {
-       if (!valparams)
-           yasm_error_set(YASM_ERROR_VALUE, N_("[%s] requires an argument"),
-                          "BITS");
-       else if ((vp = yasm_vps_first(valparams)) && !vp->val &&
-           vp->param != NULL &&
-           (intn = yasm_expr_get_intnum(&vp->param, 0)) != NULL &&
-           (lval = yasm_intnum_get_int(intn)) &&
-           (lval == 16 || lval == 32 || lval == 64))
-           arch_x86->mode_bits = (unsigned char)lval;
-       else
-           yasm_error_set(YASM_ERROR_VALUE, N_("invalid argument to [%s]"),
-                          "BITS");
-       return 0;
-    } else
-       return 1;
+    if ((vp = yasm_vps_first(valparams)) && !vp->val && vp->param != NULL &&
+       (intn = yasm_expr_get_intnum(&vp->param, 0)) != NULL &&
+       (lval = yasm_intnum_get_int(intn)) &&
+       (lval == 16 || lval == 32 || lval == 64))
+       arch_x86->mode_bits = (unsigned char)lval;
+    else
+       yasm_error_set(YASM_ERROR_VALUE, N_("invalid argument to [%s]"),
+                      "BITS");
+}
+
+static void
+x86_dir_code16(yasm_object *object, yasm_valparamhead *valparams,
+              yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch;
+    arch_x86->mode_bits = 16;
+}
+
+static void
+x86_dir_code32(yasm_object *object, yasm_valparamhead *valparams,
+              yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch;
+    arch_x86->mode_bits = 32;
+}
+
+static void
+x86_dir_code64(yasm_object *object, yasm_valparamhead *valparams,
+              yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch;
+    arch_x86->mode_bits = 64;
 }
 
 static const unsigned char **
@@ -438,25 +475,33 @@ x86_segreg_print(yasm_arch *arch, uintptr_t segreg, FILE *f)
 }
 
 /* Define x86 machines -- see arch.h for details */
-static yasm_arch_machine x86_machines[] = {
+static const yasm_arch_machine x86_machines[] = {
     { "IA-32 and derivatives", "x86" },
     { "AMD64", "amd64" },
     { NULL, NULL }
 };
 
+static const yasm_directive x86_directives[] = {
+    { "cpu",           "nasm", x86_dir_cpu,    YASM_DIR_ARG_REQUIRED },
+    { "bits",          "nasm", x86_dir_bits,   YASM_DIR_ARG_REQUIRED },
+    { ".code16",       "gas",  x86_dir_code16, YASM_DIR_ANY },
+    { ".code32",       "gas",  x86_dir_code32, YASM_DIR_ANY },
+    { ".code64",       "gas",  x86_dir_code64, YASM_DIR_ANY },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define arch structure -- see arch.h for details */
 yasm_arch_module yasm_x86_LTX_arch = {
     "x86 (IA-32 and derivatives), AMD64",
     "x86",
+    x86_directives,
     x86_create,
     x86_destroy,
     x86_get_machine,
     x86_get_address_size,
     x86_set_var,
-    yasm_x86__parse_cpu,
     yasm_x86__parse_check_insnprefix,
     yasm_x86__parse_check_regtmod,
-    x86_parse_directive,
     x86_get_fill,
     yasm_x86__finalize_insn,
     yasm_x86__floatnum_tobytes,
index 24b39bd6a5b4fb0a368397cc72d0784d904e50a0..95fe775e4ee7a5fe93d1065ce80d5f5ac31f7ccd 100644 (file)
@@ -259,7 +259,8 @@ int yasm_x86__expr_checkea
     (x86_effaddr *x86_ea, unsigned char *addrsize, unsigned int bits,
      int address16_op, unsigned char *rex, yasm_bytecode *bc);
 
-void yasm_x86__parse_cpu(yasm_arch *arch, const char *cpuid, size_t cpuid_len);
+void yasm_x86__parse_cpu(yasm_arch_x86 *arch_x86, const char *cpuid,
+                        size_t cpuid_len);
 
 yasm_arch_insnprefix yasm_x86__parse_check_insnprefix
     (yasm_arch *arch, /*@out@*/ uintptr_t data[4], const char *id,
index 93c48b45ac0d5dd135812b72f774a4c1948aa262..977c592809d093431ff2f6d56300025be56eb2a3 100644 (file)
@@ -3295,9 +3295,9 @@ yasm_x86__parse_check_insnprefix(yasm_arch *arch, uintptr_t data[4],
 }
 
 void
-yasm_x86__parse_cpu(yasm_arch *arch, const char *cpuid, size_t cpuid_len)
+yasm_x86__parse_cpu(yasm_arch_x86 *arch_x86, const char *cpuid,
+                   size_t cpuid_len)
 {
-    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch;
     /*@null@*/ const cpu_parse_data *pdata;
     size_t i;
     static char lcaseid[16];
index 1b045fcf54ec080454697536abff8b442bd7b184..6ec6407d50cd94c0259f70f95b61b768b785780a 100644 (file)
@@ -99,19 +99,12 @@ cv_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap,
     yasm_cv__generate_type(object);
 }
 
-static int
-cv_dbgfmt_directive(yasm_object *object, const char *name,
-                   yasm_valparamhead *valparams, unsigned long line)
-{
-    return 1;      /* TODO */
-}
-
 /* Define dbgfmt structure -- see dbgfmt.h for details */
 yasm_dbgfmt_module yasm_cv8_LTX_dbgfmt = {
     "CodeView debugging format for VC8",
     "cv8",
+    NULL,   /* no directives */
     cv8_dbgfmt_create,
     cv_dbgfmt_destroy,
-    cv_dbgfmt_directive,
     cv_dbgfmt_generate
 };
index eb76fa30d961e9d3f8a919d4f03f5e8fb3d67fe0..e498f0d198be7a15e2b28dd5c20f736e0f4de775 100644 (file)
@@ -330,19 +330,20 @@ dwarf2_section_data_print(void *data, FILE *f, int indent_level)
     /* TODO */
 }
 
-static int
-dwarf2_dbgfmt_directive(yasm_object *object, const char *name,
-                       yasm_valparamhead *valparams, unsigned long line)
-{
-    return yasm_dwarf2__line_directive(object, name, valparams, line);
-}
+static const yasm_directive dwarf2_directives[] = {
+    { ".loc",  "gas",  yasm_dwarf2__dir_loc,   YASM_DIR_ARG_REQUIRED },
+    { ".file", "gas",  yasm_dwarf2__dir_file,  YASM_DIR_ARG_REQUIRED },
+    { "loc",   "nasm", yasm_dwarf2__dir_loc,   YASM_DIR_ARG_REQUIRED },
+    { "file",  "nasm", yasm_dwarf2__dir_file,  YASM_DIR_ARG_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
 
 /* Define dbgfmt structure -- see dbgfmt.h for details */
 yasm_dbgfmt_module yasm_dwarf2_LTX_dbgfmt = {
     "DWARF2 debugging format",
     "dwarf2",
+    dwarf2_directives,
     dwarf2_dbgfmt_create,
     dwarf2_dbgfmt_destroy,
-    dwarf2_dbgfmt_directive,
     dwarf2_dbgfmt_generate
 };
index 1c361b0c3ef9e0fe099ad7de401bc33dd85f1634..eeba0a19bbb1c5ef750bee1e32ef1691a532936b 100644 (file)
@@ -107,9 +107,12 @@ yasm_section *yasm_dwarf2__generate_line
     (yasm_object *object, yasm_linemap *linemap, yasm_errwarns *errwarns,
      int asm_source, /*@out@*/ yasm_section **main_code,
      /*@out@*/ size_t *num_line_sections);
-int yasm_dwarf2__line_directive
-    (yasm_object *object, const char *name, yasm_valparamhead *valparams,
-     unsigned long line);
+void yasm_dwarf2__dir_loc(yasm_object *object, yasm_valparamhead *valparams,
+                         yasm_valparamhead *objext_valparams,
+                         unsigned long line);
+void yasm_dwarf2__dir_file(yasm_object *object, yasm_valparamhead *valparams,
+                          yasm_valparamhead *objext_valparams,
+                          unsigned long line);
 
 /* Address range table functions */
 yasm_section *yasm_dwarf2__generate_aranges(yasm_object *object,
index c38fda4c158c14bd704c3e0417fa9fbeaaeaa07b..6b80ac31127d496b4a5ff8eccba1887809cba760 100644 (file)
@@ -826,188 +826,187 @@ dwarf2_line_op_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, void *d,
     return 0;
 }
 
-int
-yasm_dwarf2__line_directive(yasm_object *object, const char *name,
-                           yasm_valparamhead *valparams, unsigned long line)
+void
+yasm_dwarf2__dir_loc(yasm_object *object, yasm_valparamhead *valparams,
+                    yasm_valparamhead *objext_valparams, unsigned long line)
 {
-    yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt;
     yasm_valparam *vp;
-    if (yasm__strcasecmp(name, "loc") == 0) {
-       /*@dependent@*/ /*@null@*/ const yasm_intnum *intn;
-       dwarf2_section_data *dsd;
-       dwarf2_loc *loc = yasm_xmalloc(sizeof(dwarf2_loc));
-
-       /* File number (required) */
-       if (!valparams || !(vp = yasm_vps_first(valparams)) || !vp->param) {
-           yasm_error_set(YASM_ERROR_SYNTAX, N_("file number required"));
-           yasm_xfree(loc);
-           return 0;
-       }
-       intn = yasm_expr_get_intnum(&vp->param, 0);
-       if (!intn) {
-           yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                          N_("file number is not a constant"));
-           yasm_xfree(loc);
-           return 0;
-       }
-       if (yasm_intnum_sign(intn) != 1) {
-           yasm_error_set(YASM_ERROR_VALUE,
-                          N_("file number less than one"));
-           yasm_xfree(loc);
-           return 0;
-       }
-       loc->file = yasm_intnum_get_uint(intn);
 
-       /* Line number (required) */
-       vp = yasm_vps_next(vp);
-       if (!vp || !vp->param) {
-           yasm_error_set(YASM_ERROR_SYNTAX, N_("line number required"));
-           yasm_xfree(loc);
-           return 0;
-       }
+    /*@dependent@*/ /*@null@*/ const yasm_intnum *intn;
+    dwarf2_section_data *dsd;
+    dwarf2_loc *loc = yasm_xmalloc(sizeof(dwarf2_loc));
+
+    /* File number (required) */
+    if (!valparams || !(vp = yasm_vps_first(valparams)) || !vp->param) {
+       yasm_error_set(YASM_ERROR_SYNTAX, N_("file number required"));
+       yasm_xfree(loc);
+       return;
+    }
+    intn = yasm_expr_get_intnum(&vp->param, 0);
+    if (!intn) {
+       yasm_error_set(YASM_ERROR_NOT_CONSTANT,
+                      N_("file number is not a constant"));
+       yasm_xfree(loc);
+       return;
+    }
+    if (yasm_intnum_sign(intn) != 1) {
+       yasm_error_set(YASM_ERROR_VALUE, N_("file number less than one"));
+       yasm_xfree(loc);
+       return;
+    }
+    loc->file = yasm_intnum_get_uint(intn);
+
+    /* Line number (required) */
+    vp = yasm_vps_next(vp);
+    if (!vp || !vp->param) {
+       yasm_error_set(YASM_ERROR_SYNTAX, N_("line number required"));
+       yasm_xfree(loc);
+       return;
+    }
+    intn = yasm_expr_get_intnum(&vp->param, 0);
+    if (!intn) {
+       yasm_error_set(YASM_ERROR_NOT_CONSTANT,
+                      N_("file number is not a constant"));
+       yasm_xfree(loc);
+       return;
+    }
+    loc->line = yasm_intnum_get_uint(intn);
+
+    /* Generate new section data if it doesn't already exist */
+    dsd = yasm_section_get_data(object->cur_section,
+                               &yasm_dwarf2__section_data_cb);
+    if (!dsd) {
+       dsd = yasm_xmalloc(sizeof(dwarf2_section_data));
+       STAILQ_INIT(&dsd->locs);
+       yasm_section_add_data(object->cur_section,
+                             &yasm_dwarf2__section_data_cb, dsd);
+    }
+
+    /* Defaults for optional settings */
+    loc->column = 0;
+    loc->isa_change = 0;
+    loc->isa = 0;
+    loc->is_stmt = IS_STMT_NOCHANGE;
+    loc->basic_block = 0;
+    loc->prologue_end = 0;
+    loc->epilogue_begin = 0;
+
+    /* Optional column number */
+    vp = yasm_vps_next(vp);
+    if (vp && vp->param) {
        intn = yasm_expr_get_intnum(&vp->param, 0);
        if (!intn) {
            yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                          N_("file number is not a constant"));
+                          N_("column number is not a constant"));
            yasm_xfree(loc);
-           return 0;
-       }
-       loc->line = yasm_intnum_get_uint(intn);
-
-       /* Generate new section data if it doesn't already exist */
-       dsd = yasm_section_get_data(object->cur_section,
-                                   &yasm_dwarf2__section_data_cb);
-       if (!dsd) {
-           dsd = yasm_xmalloc(sizeof(dwarf2_section_data));
-           STAILQ_INIT(&dsd->locs);
-           yasm_section_add_data(object->cur_section,
-                                 &yasm_dwarf2__section_data_cb, dsd);
+           return;
        }
-
-       /* Defaults for optional settings */
-       loc->column = 0;
-       loc->isa_change = 0;
-       loc->isa = 0;
-       loc->is_stmt = IS_STMT_NOCHANGE;
-       loc->basic_block = 0;
-       loc->prologue_end = 0;
-       loc->epilogue_begin = 0;
-
-       /* Optional column number */
+       loc->column = yasm_intnum_get_uint(intn);
        vp = yasm_vps_next(vp);
-       if (vp && vp->param) {
+    }
+
+    /* Other options */
+    while (vp && vp->val) {
+       if (yasm__strcasecmp(vp->val, "basic_block") == 0)
+           loc->basic_block = 1;
+       else if (yasm__strcasecmp(vp->val, "prologue_end") == 0)
+           loc->prologue_end = 1;
+       else if (yasm__strcasecmp(vp->val, "epilogue_begin") == 0)
+           loc->epilogue_begin = 1;
+       else if (yasm__strcasecmp(vp->val, "is_stmt") == 0) {
+           if (!vp->param) {
+               yasm_error_set(YASM_ERROR_SYNTAX,
+                              N_("is_stmt requires value"));
+               yasm_xfree(loc);
+               return;
+           }
            intn = yasm_expr_get_intnum(&vp->param, 0);
            if (!intn) {
                yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                              N_("column number is not a constant"));
+                              N_("is_stmt value is not a constant"));
                yasm_xfree(loc);
-               return 0;
+               return;
            }
-           loc->column = yasm_intnum_get_uint(intn);
-           vp = yasm_vps_next(vp);
-       }
-
-       /* Other options */
-       while (vp && vp->val) {
-           if (yasm__strcasecmp(vp->val, "basic_block") == 0)
-               loc->basic_block = 1;
-           else if (yasm__strcasecmp(vp->val, "prologue_end") == 0)
-               loc->prologue_end = 1;
-           else if (yasm__strcasecmp(vp->val, "epilogue_begin") == 0)
-               loc->epilogue_begin = 1;
-           else if (yasm__strcasecmp(vp->val, "is_stmt") == 0) {
-               if (!vp->param) {
-                   yasm_error_set(YASM_ERROR_SYNTAX,
-                                  N_("is_stmt requires value"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-               intn = yasm_expr_get_intnum(&vp->param, 0);
-               if (!intn) {
-                   yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                                  N_("is_stmt value is not a constant"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-               if (yasm_intnum_is_zero(intn))
-                   loc->is_stmt = IS_STMT_SET;
-               else if (yasm_intnum_is_pos1(intn))
-                   loc->is_stmt = IS_STMT_CLEAR;
-               else {
-                   yasm_error_set(YASM_ERROR_VALUE,
-                                  N_("is_stmt value not 0 or 1"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-           } else if (yasm__strcasecmp(vp->val, "isa") == 0) {
-               if (!vp->param) {
-                   yasm_error_set(YASM_ERROR_SYNTAX, N_("isa requires value"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-               intn = yasm_expr_get_intnum(&vp->param, 0);
-               if (!intn) {
-                   yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                                  N_("isa value is not a constant"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-               if (yasm_intnum_sign(intn) < 0) {
-                   yasm_error_set(YASM_ERROR_VALUE,
-                                  N_("isa value less than zero"));
-                   yasm_xfree(loc);
-                   return 0;
-               }
-               loc->isa_change = 1;
-               loc->isa = yasm_intnum_get_uint(intn);
-           } else
-               yasm_warn_set(YASM_WARN_GENERAL,
-                             N_("unrecognized loc option `%s'"), vp->val);
-       }
+           if (yasm_intnum_is_zero(intn))
+               loc->is_stmt = IS_STMT_SET;
+           else if (yasm_intnum_is_pos1(intn))
+               loc->is_stmt = IS_STMT_CLEAR;
+           else {
+               yasm_error_set(YASM_ERROR_VALUE,
+                              N_("is_stmt value not 0 or 1"));
+               yasm_xfree(loc);
+               return;
+           }
+       } else if (yasm__strcasecmp(vp->val, "isa") == 0) {
+           if (!vp->param) {
+               yasm_error_set(YASM_ERROR_SYNTAX, N_("isa requires value"));
+               yasm_xfree(loc);
+               return;
+           }
+           intn = yasm_expr_get_intnum(&vp->param, 0);
+           if (!intn) {
+               yasm_error_set(YASM_ERROR_NOT_CONSTANT,
+                              N_("isa value is not a constant"));
+               yasm_xfree(loc);
+               return;
+           }
+           if (yasm_intnum_sign(intn) < 0) {
+               yasm_error_set(YASM_ERROR_VALUE,
+                              N_("isa value less than zero"));
+               yasm_xfree(loc);
+               return;
+           }
+           loc->isa_change = 1;
+           loc->isa = yasm_intnum_get_uint(intn);
+       } else
+           yasm_warn_set(YASM_WARN_GENERAL,
+                         N_("unrecognized loc option `%s'"), vp->val);
+    }
 
-       /* Append new location */
-       loc->vline = line;
-       loc->bc = NULL;
-       loc->sym = NULL;
-       STAILQ_INSERT_TAIL(&dsd->locs, loc, link);
+    /* Append new location */
+    loc->vline = line;
+    loc->bc = NULL;
+    loc->sym = NULL;
+    STAILQ_INSERT_TAIL(&dsd->locs, loc, link);
+}
 
-       return 0;
-    } else if (yasm__strcasecmp(name, "file") == 0) {
-       /*@dependent@*/ /*@null@*/ const yasm_intnum *file_intn;
-       unsigned long filenum;
-
-       if (!valparams) {
-           yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
-                          "FILE");
-           return 0;
-       }
+void
+yasm_dwarf2__dir_file(yasm_object *object, yasm_valparamhead *valparams,
+                     yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt;
+    yasm_valparam *vp;
+    /*@dependent@*/ /*@null@*/ const yasm_intnum *file_intn;
+    unsigned long filenum;
 
-       vp = yasm_vps_first(valparams);
-       if (vp->val) {
-           /* Just a bare filename */
-           yasm_object_set_source_fn(object, vp->val);
-           return 0;
-       }
+    if (!valparams) {
+       yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
+                      "FILE");
+       return;
+    }
 
-       /* Otherwise.. first vp is the file number */
-       file_intn = yasm_expr_get_intnum(&vp->param, 0);
-       if (!file_intn) {
-           yasm_error_set(YASM_ERROR_NOT_CONSTANT,
-                          N_("file number is not a constant"));
-           return 0;
-       }
-       filenum = yasm_intnum_get_uint(file_intn);
+    vp = yasm_vps_first(valparams);
+    if (vp->val) {
+       /* Just a bare filename */
+       yasm_object_set_source_fn(object, vp->val);
+       return;
+    }
 
-       vp = yasm_vps_next(vp);
-       if (!vp || !vp->val) {
-           yasm_error_set(YASM_ERROR_SYNTAX,
-                          N_("file number given but no filename"));
-           return 0;
-       }
+    /* Otherwise.. first vp is the file number */
+    file_intn = yasm_expr_get_intnum(&vp->param, 0);
+    if (!file_intn) {
+       yasm_error_set(YASM_ERROR_NOT_CONSTANT,
+                      N_("file number is not a constant"));
+       return;
+    }
+    filenum = yasm_intnum_get_uint(file_intn);
 
-       dwarf2_dbgfmt_add_file(dbgfmt_dwarf2, filenum, vp->val);
-       return 0;
+    vp = yasm_vps_next(vp);
+    if (!vp || !vp->val) {
+       yasm_error_set(YASM_ERROR_SYNTAX,
+                      N_("file number given but no filename"));
+       return;
     }
-    return 1;
-}
 
+    dwarf2_dbgfmt_add_file(dbgfmt_dwarf2, filenum, vp->val);
+}
index c145c87f5e1b9a4cde545cc0b442353ba6d844a6..e73e882af048a0a5579aae26a983313d7aa0ecf4 100644 (file)
@@ -3038,70 +3038,6 @@ e3
 69 
 6e 
 00 
-5f 
-5f 
-73 
-74 
-64 
-65 
-72 
-72 
-70 
-00 
-66 
-70 
-72 
-69 
-6e 
-74 
-66 
-00 
-66 
-6f 
-70 
-65 
-6e 
-00 
-70 
-72 
-69 
-6e 
-74 
-66 
-00 
-66 
-67 
-65 
-74 
-63 
-00 
-5f 
-5f 
-69 
-73 
-74 
-68 
-72 
-65 
-61 
-64 
-65 
-64 
-00 
-66 
-65 
-72 
-72 
-6f 
-72 
-00 
-66 
-63 
-6c 
-6f 
-73 
-65 
-00 
 2e 
 4c 
 64 
@@ -3217,6 +3153,16 @@ e3
 4c 
 32 
 00 
+5f 
+5f 
+73 
+74 
+64 
+65 
+72 
+72 
+70 
+00 
 2e 
 4c 
 43 
@@ -3224,10 +3170,24 @@ e3
 49 
 34 
 00 
+66 
+70 
+72 
+69 
+6e 
+74 
+66 
+00 
 2e 
 4c 
 31 
 00 
+66 
+6f 
+70 
+65 
+6e 
+00 
 2e 
 4c 
 34 
@@ -3236,6 +3196,32 @@ e3
 4c 
 36 
 00 
+70 
+72 
+69 
+6e 
+74 
+66 
+00 
+66 
+67 
+65 
+74 
+63 
+00 
+5f 
+5f 
+69 
+73 
+74 
+68 
+72 
+65 
+61 
+64 
+65 
+64 
+00 
 2e 
 4c 
 38 
@@ -3248,6 +3234,20 @@ e3
 4c 
 37 
 00 
+66 
+65 
+72 
+72 
+6f 
+72 
+00 
+66 
+63 
+6c 
+6f 
+73 
+65 
+00 
 2e 
 4c 
 46 
@@ -4554,7 +4554,7 @@ e3
 00 
 04 
 00 
-de 
+d0 
 00 
 00 
 00 
@@ -4570,7 +4570,7 @@ cc
 00 
 04 
 00 
-da 
+cc 
 00 
 00 
 00 
@@ -4586,7 +4586,7 @@ af
 00 
 04 
 00 
-d6 
+c8 
 00 
 00 
 00 
@@ -4602,7 +4602,7 @@ d6
 00 
 04 
 00 
-d2 
+aa 
 00 
 00 
 00 
@@ -4618,7 +4618,7 @@ d2
 00 
 04 
 00 
-ce 
+a6 
 00 
 00 
 00 
@@ -4634,7 +4634,7 @@ ce
 00 
 04 
 00 
-ca 
+9c 
 00 
 00 
 00 
@@ -4650,7 +4650,7 @@ dc
 00 
 04 
 00 
-c3 
+8d 
 00 
 00 
 00 
@@ -4666,7 +4666,7 @@ c3
 00 
 04 
 00 
-b
+7
 00 
 00 
 00 
@@ -4682,7 +4682,7 @@ bf
 00 
 04 
 00 
-b
+7
 00 
 00 
 00 
@@ -4698,7 +4698,7 @@ b8
 00 
 04 
 00 
-b
+7
 00 
 00 
 00 
@@ -4714,7 +4714,7 @@ b1
 00 
 04 
 00 
-a
+6
 00 
 00 
 00 
@@ -4730,7 +4730,7 @@ aa
 00 
 04 
 00 
-a
+6
 00 
 00 
 00 
@@ -4746,7 +4746,7 @@ a3
 00 
 04 
 00 
-9
+5
 00 
 00 
 00 
@@ -4762,7 +4762,7 @@ a3
 00 
 04 
 00 
-9
+5
 00 
 00 
 00 
@@ -4778,7 +4778,7 @@ a3
 00 
 0b 
 00 
-9
+5
 00 
 00 
 00 
@@ -4794,7 +4794,7 @@ a3
 00 
 0b 
 00 
-8
+4
 00 
 00 
 00 
@@ -4810,7 +4810,7 @@ a3
 00 
 0b 
 00 
-8
+4
 00 
 00 
 00 
@@ -4826,7 +4826,7 @@ a3
 00 
 0b 
 00 
-8
+4
 00 
 00 
 00 
@@ -4858,7 +4858,7 @@ a3
 00 
 0b 
 00 
-7
+3
 00 
 00 
 00 
@@ -4874,7 +4874,7 @@ a3
 00 
 04 
 00 
-6
+2
 00 
 00 
 00 
@@ -4906,7 +4906,7 @@ a3
 00 
 09 
 00 
-6
+2
 00 
 00 
 00 
@@ -4938,7 +4938,7 @@ a3
 00 
 07 
 00 
-5
+1
 00 
 00 
 00 
@@ -5002,7 +5002,7 @@ e3
 00 
 04 
 00 
-10 
+83 
 00 
 00 
 00 
@@ -5018,7 +5018,7 @@ e3
 00 
 00 
 00 
-1a 
+94 
 00 
 00 
 00 
@@ -5034,7 +5034,7 @@ e3
 00 
 00 
 00 
-22 
+a0 
 00 
 00 
 00 
@@ -5050,7 +5050,7 @@ e3
 00 
 00 
 00 
-28 
+ae 
 00 
 00 
 00 
@@ -5066,7 +5066,7 @@ e3
 00 
 00 
 00 
-2f 
+b5 
 00 
 00 
 00 
@@ -5082,7 +5082,7 @@ e3
 00 
 00 
 00 
-35 
+bb 
 00 
 00 
 00 
@@ -5098,7 +5098,7 @@ e3
 00 
 00 
 00 
-42 
+d4 
 00 
 00 
 00 
@@ -5114,7 +5114,7 @@ e3
 00 
 00 
 00 
-49 
+db 
 00 
 00 
 00 
index 178ae19f9889db363c5a68f9fa954ec61a20b618..af09833caf60cd7f7c3af6976c9725bb9ae4deb6 100644 (file)
@@ -6246,7 +6246,7 @@ ff
 00 
 00 
 00 
-b6 
+9e 
 04 
 00 
 00 
@@ -6294,7 +6294,7 @@ ff
 00 
 00 
 00 
-b6 
+9e 
 04 
 00 
 00 
@@ -6342,7 +6342,7 @@ ff
 00 
 00 
 00 
-b6 
+9e 
 04 
 00 
 00 
@@ -6390,7 +6390,7 @@ ff
 00 
 00 
 00 
-b6 
+9e 
 04 
 00 
 00 
@@ -6438,7 +6438,7 @@ ff
 00 
 00 
 00 
-b6 
+9e 
 04 
 00 
 00 
@@ -6486,7 +6486,7 @@ ff
 00 
 00 
 00 
-b7 
+9f 
 04 
 00 
 00 
@@ -6558,7 +6558,7 @@ ff
 00 
 00 
 00 
-b8 
+a1 
 04 
 00 
 00 
@@ -6606,7 +6606,7 @@ ff
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -6654,7 +6654,7 @@ a4
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -6702,7 +6702,7 @@ b0
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -6750,7 +6750,7 @@ bc
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -6798,7 +6798,7 @@ cc
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -6822,7 +6822,7 @@ f0
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -6894,7 +6894,7 @@ ff
 00 
 00 
 00 
-bb 
+a5 
 04 
 00 
 00 
@@ -6942,7 +6942,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -6990,7 +6990,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -7038,7 +7038,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -7086,7 +7086,7 @@ ff
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -7110,7 +7110,7 @@ d0
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -7134,7 +7134,7 @@ db
 00 
 00 
 00 
-c0 
+ab 
 04 
 00 
 00 
@@ -7182,7 +7182,7 @@ f5
 00 
 00 
 00 
-c1 
+ac 
 04 
 00 
 00 
@@ -7230,7 +7230,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -7278,7 +7278,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -7326,7 +7326,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -7374,7 +7374,7 @@ ff
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -7398,7 +7398,7 @@ b0
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -7422,7 +7422,7 @@ bb
 00 
 00 
 00 
-c0 
+ab 
 04 
 00 
 00 
@@ -7470,7 +7470,7 @@ d9
 00 
 00 
 00 
-c2 
+ae 
 04 
 00 
 00 
@@ -7518,7 +7518,7 @@ e5
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -7566,7 +7566,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -7614,7 +7614,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -7662,7 +7662,7 @@ ff
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -7686,7 +7686,7 @@ ff
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -7710,7 +7710,7 @@ ff
 00 
 00 
 00 
-c0 
+ab 
 04 
 00 
 00 
@@ -7758,7 +7758,7 @@ b9
 00 
 00 
 00 
-c3 
+b0 
 04 
 00 
 00 
@@ -7806,7 +7806,7 @@ c5
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -7854,7 +7854,7 @@ e5
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -7902,7 +7902,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -7950,7 +7950,7 @@ ff
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -7974,7 +7974,7 @@ ff
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -7998,7 +7998,7 @@ ff
 00 
 00 
 00 
-c0 
+ab 
 04 
 00 
 00 
@@ -8070,7 +8070,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -8118,7 +8118,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -8166,7 +8166,7 @@ ff
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -8214,7 +8214,7 @@ ff
 00 
 00 
 00 
-c5 
+b3 
 04 
 00 
 00 
@@ -8262,7 +8262,7 @@ ff
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -8310,7 +8310,7 @@ ac
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -8334,7 +8334,7 @@ eb
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -8382,7 +8382,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -8430,7 +8430,7 @@ ff
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -8478,7 +8478,7 @@ ff
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -8502,7 +8502,7 @@ ff
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -8550,7 +8550,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -8574,7 +8574,7 @@ ff
 00 
 00 
 00 
-ba 
+a4 
 04 
 00 
 00 
@@ -8598,7 +8598,7 @@ f5
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -8622,7 +8622,7 @@ ff
 00 
 00 
 00 
-c8 
+ba 
 04 
 00 
 00 
@@ -8646,7 +8646,7 @@ ff
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -8670,7 +8670,7 @@ ff
 00 
 00 
 00 
-c8 
+ba 
 04 
 00 
 00 
@@ -8718,7 +8718,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -8742,7 +8742,7 @@ ac
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -8790,7 +8790,7 @@ cd
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -8814,7 +8814,7 @@ df
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -8910,7 +8910,7 @@ ff
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -8958,7 +8958,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -9006,7 +9006,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -9054,7 +9054,7 @@ ff
 00 
 00 
 00 
-be 
+a8 
 04 
 00 
 00 
@@ -9126,7 +9126,7 @@ c6
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -9174,7 +9174,7 @@ db
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -9198,7 +9198,7 @@ e8
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -9270,7 +9270,7 @@ ff
 00 
 00 
 00 
-cb 
+be 
 04 
 00 
 00 
@@ -9342,7 +9342,7 @@ ff
 00 
 00 
 00 
-cb 
+be 
 04 
 00 
 00 
@@ -9390,7 +9390,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -9414,7 +9414,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -9462,7 +9462,7 @@ ff
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -9510,7 +9510,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -9534,7 +9534,7 @@ ff
 00 
 00 
 00 
-ce 
+c1 
 04 
 00 
 00 
@@ -9582,7 +9582,7 @@ ff
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -9630,7 +9630,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -9654,7 +9654,7 @@ ff
 00 
 00 
 00 
-ce 
+c1 
 04 
 00 
 00 
@@ -9702,7 +9702,7 @@ b0
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -9750,7 +9750,7 @@ c1
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -9774,7 +9774,7 @@ cc
 00 
 00 
 00 
-cf 
+c2 
 04 
 00 
 00 
@@ -9846,7 +9846,7 @@ e7
 00 
 00 
 00 
-d0 
+c3 
 04 
 00 
 00 
@@ -9918,7 +9918,7 @@ f6
 00 
 00 
 00 
-d0 
+c3 
 04 
 00 
 00 
@@ -9966,7 +9966,7 @@ ff
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -10014,7 +10014,7 @@ ff
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -10062,7 +10062,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -10086,7 +10086,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -10134,7 +10134,7 @@ ff
 00 
 00 
 00 
-d1 
+c4 
 04 
 00 
 00 
@@ -10182,7 +10182,7 @@ ff
 00 
 00 
 00 
-d2 
+c5 
 04 
 00 
 00 
@@ -10230,7 +10230,7 @@ a3
 00 
 00 
 00 
-d3 
+c6 
 04 
 00 
 00 
@@ -10278,7 +10278,7 @@ ba
 00 
 00 
 00 
-d4 
+c7 
 04 
 00 
 00 
@@ -10326,7 +10326,7 @@ d1
 00 
 00 
 00 
-d5 
+c8 
 04 
 00 
 00 
@@ -10374,7 +10374,7 @@ e8
 00 
 00 
 00 
-d6 
+c9 
 04 
 00 
 00 
@@ -10422,7 +10422,7 @@ ff
 00 
 00 
 00 
-d4 
+c7 
 04 
 00 
 00 
@@ -10470,7 +10470,7 @@ ff
 00 
 00 
 00 
-d7 
+ca 
 04 
 00 
 00 
@@ -10518,7 +10518,7 @@ ff
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -10566,7 +10566,7 @@ ff
 00 
 00 
 00 
-c5 
+b3 
 04 
 00 
 00 
@@ -10614,7 +10614,7 @@ ff
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -10662,7 +10662,7 @@ ff
 00 
 00 
 00 
-d8 
+cb 
 04 
 00 
 00 
@@ -10710,7 +10710,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -10734,7 +10734,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -10782,7 +10782,7 @@ a5
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -10806,7 +10806,7 @@ b0
 00 
 00 
 00 
-ce 
+c1 
 04 
 00 
 00 
@@ -10854,7 +10854,7 @@ c4
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -10902,7 +10902,7 @@ d5
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -10926,7 +10926,7 @@ e0
 00 
 00 
 00 
-ce 
+c1 
 04 
 00 
 00 
@@ -10974,7 +10974,7 @@ f3
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -11022,7 +11022,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -11046,7 +11046,7 @@ ff
 00 
 00 
 00 
-cf 
+c2 
 04 
 00 
 00 
@@ -11094,7 +11094,7 @@ ff
 00 
 00 
 00 
-cd 
+c0 
 04 
 00 
 00 
@@ -11166,7 +11166,7 @@ ff
 00 
 00 
 00 
-d0 
+c3 
 04 
 00 
 00 
@@ -11214,7 +11214,7 @@ ff
 00 
 00 
 00 
-d7 
+ca 
 04 
 00 
 00 
@@ -11238,7 +11238,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -11262,7 +11262,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -11310,7 +11310,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -11334,7 +11334,7 @@ c7
 00 
 00 
 00 
-b9 
+a2 
 04 
 00 
 00 
@@ -11358,7 +11358,7 @@ ff
 00 
 00 
 00 
-d9 
+d0 
 04 
 00 
 00 
@@ -11382,7 +11382,7 @@ ff
 00 
 00 
 00 
-da 
+d2 
 04 
 00 
 00 
@@ -11454,7 +11454,7 @@ ff
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -11478,7 +11478,7 @@ b7
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -11550,7 +11550,7 @@ e0
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -11574,7 +11574,7 @@ ff
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -11622,7 +11622,7 @@ ff
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -11670,7 +11670,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -11718,7 +11718,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -11766,7 +11766,7 @@ a3
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -11790,7 +11790,7 @@ b5
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -11814,7 +11814,7 @@ d2
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -11838,7 +11838,7 @@ ea
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -11862,7 +11862,7 @@ ff
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -11886,7 +11886,7 @@ ff
 00 
 00 
 00 
-dc 
+d7 
 04 
 00 
 00 
@@ -11934,7 +11934,7 @@ ff
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -11982,7 +11982,7 @@ ff
 00 
 00 
 00 
-dd 
+d8 
 04 
 00 
 00 
@@ -12030,7 +12030,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -12078,7 +12078,7 @@ ff
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -12174,7 +12174,7 @@ a6
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -12222,7 +12222,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -12246,7 +12246,7 @@ ff
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -12270,7 +12270,7 @@ ff
 00 
 00 
 00 
-de 
+da 
 04 
 00 
 00 
@@ -12294,7 +12294,7 @@ aa
 00 
 00 
 00 
-df 
+db 
 04 
 00 
 00 
@@ -12366,7 +12366,7 @@ d0
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -12390,7 +12390,7 @@ d9
 00 
 00 
 00 
-c8 
+ba 
 04 
 00 
 00 
@@ -12414,7 +12414,7 @@ ff
 00 
 00 
 00 
-e0 
+dc 
 04 
 00 
 00 
@@ -12462,7 +12462,7 @@ ff
 00 
 00 
 00 
-ca 
+bd 
 04 
 00 
 00 
@@ -12510,7 +12510,7 @@ ff
 00 
 00 
 00 
-c5 
+b3 
 04 
 00 
 00 
@@ -12558,7 +12558,7 @@ ff
 00 
 00 
 00 
-cc 
+bf 
 04 
 00 
 00 
@@ -12606,7 +12606,7 @@ b8
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -12630,7 +12630,7 @@ ff
 00 
 00 
 00 
-e1 
+dd 
 04 
 00 
 00 
@@ -12678,7 +12678,7 @@ c7
 00 
 00 
 00 
-bf 
+a9 
 04 
 00 
 00 
@@ -12750,7 +12750,7 @@ e1
 00 
 00 
 00 
-c9 
+bc 
 04 
 00 
 00 
@@ -12774,7 +12774,7 @@ f4
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -12798,7 +12798,7 @@ ff
 00 
 00 
 00 
-dc 
+d7 
 04 
 00 
 00 
@@ -12846,7 +12846,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -12870,7 +12870,7 @@ ff
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -12894,7 +12894,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -12918,7 +12918,7 @@ d4
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -12942,7 +12942,7 @@ e3
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -12966,7 +12966,7 @@ ff
 00 
 00 
 00 
-bd 
+a7 
 04 
 00 
 00 
@@ -13014,7 +13014,7 @@ ff
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -13062,7 +13062,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -13110,7 +13110,7 @@ ff
 00 
 00 
 00 
-c4 
+b2 
 04 
 00 
 00 
@@ -13134,7 +13134,7 @@ ac
 00 
 00 
 00 
-c6 
+b4 
 04 
 00 
 00 
@@ -13158,7 +13158,7 @@ b9
 00 
 00 
 00 
-db 
+d5 
 04 
 00 
 00 
@@ -13206,7 +13206,7 @@ cd
 00 
 00 
 00 
-c
+b
 04 
 00 
 00 
@@ -13254,7 +13254,7 @@ d9
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -13278,7 +13278,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -13302,7 +13302,7 @@ ff
 00 
 00 
 00 
-bc 
+a6 
 04 
 00 
 00 
@@ -13350,7 +13350,7 @@ ab
 00 
 00 
 00 
-e2 
+e1 
 04 
 00 
 00 
@@ -13374,7 +13374,7 @@ b4
 00 
 00 
 00 
-e3 
+e2 
 04 
 00 
 00 
@@ -13422,7 +13422,7 @@ cd
 00 
 00 
 00 
-e2 
+e1 
 04 
 00 
 00 
@@ -13446,7 +13446,7 @@ d7
 00 
 00 
 00 
-c8 
+ba 
 04 
 00 
 00 
@@ -13902,7 +13902,7 @@ ff
 00 
 00 
 00 
-c8 
+ba 
 04 
 00 
 00 
 69 
 6e 
 00 
+2e 
+4c 
+64 
+65 
+62 
+75 
+67 
+5f 
+61 
+62 
+62 
+72 
+65 
+76 
+30 
+00 
+2e 
+4c 
+64 
+65 
+62 
+75 
+67 
+5f 
+69 
+6e 
+66 
+6f 
+30 
+00 
+2e 
+4c 
+64 
+65 
+62 
+75 
+67 
+5f 
+6c 
+69 
+6e 
+65 
+30 
+00 
+2e 
+4c 
+74 
+65 
+78 
+74 
+30 
+00 
+2e 
+4c 
+43 
+30 
+00 
+2e 
+4c 
+43 
+31 
+00 
+2e 
+4c 
+43 
+32 
+00 
+2e 
+4c 
+43 
+33 
+00 
+2e 
+4c 
+43 
+34 
+00 
+2e 
+4c 
+43 
+35 
+00 
+2e 
+4c 
+43 
+36 
+00 
+2e 
+4c 
+43 
+37 
+00 
+2e 
+4c 
+43 
+38 
+00 
+2e 
+4c 
+43 
+39 
+00 
+2e 
+4c 
+43 
+31 
+30 
+00 
+2e 
+4c 
+43 
+31 
+31 
+00 
+2e 
+4c 
+43 
+31 
+32 
+00 
+2e 
+4c 
+43 
+31 
+33 
+00 
+2e 
+4c 
+43 
+31 
+34 
+00 
+2e 
+4c 
+43 
+31 
+35 
+00 
+2e 
+4c 
+43 
+31 
+36 
+00 
+2e 
+4c 
+43 
+31 
+37 
+00 
+2e 
+4c 
+43 
+31 
+38 
+00 
+2e 
+4c 
+46 
+42 
+32 
+35 
+00 
+2e 
+4c 
+56 
+4c 
+30 
+00 
+2e 
+4c 
+43 
+46 
+49 
+30 
+00 
+2e 
+4c 
+56 
+4c 
+31 
+00 
 42 
 69 
 74 
 74 
 65 
 00 
+63 
+6f 
+6e 
+76 
+5f 
+62 
+76 
+00 
+72 
+65 
+73 
+75 
+6c 
+74 
+00 
+73 
+70 
+61 
+72 
+65 
+00 
+6f 
+70 
+31 
+73 
+74 
+61 
+74 
+69 
+63 
+00 
+6f 
+70 
+32 
+73 
+74 
+61 
+74 
+69 
+63 
+00 
 42 
 69 
 74 
 6f 
 74 
 00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
 66 
 72 
 6f 
 6d 
 5f 
-44 
-65 
-63 
-5f 
-73 
-74 
-61 
-74 
-69 
-63 
-5f 
-53 
-68 
-75 
-74 
 64 
-6f 
-77 
-6e 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-44 
-65 
-73 
-74 
-72 
-6f 
-79 
-00 
-79 
-61 
-73 
-6d 
-5f 
-78 
-6d 
-61 
-6c 
-6c 
-6f 
-63 
-00 
-42 
-69 
-74 
-56 
 65 
 63 
-74 
-6f 
-72 
-5f 
-66 
-72 
-6f 
-6d 
-5f 
-44 
-65 
-63 
-5f 
-73 
-74 
-61 
-74 
-69 
-63 
-00 
-53 
-65 
-74 
-5f 
-4d 
-61 
-78 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-43 
-68 
-75 
-6e 
-6b 
 5f 
-52 
-65 
-61 
 64 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-43 
-6c 
-6f 
-6e 
-65 
-00 
-79 
 61 
-73 
-6d 
-5f 
-5f 
-77 
-61 
-72 
-6e 
-69 
-6e 
-67 
-00 
-73 
 74 
-72 
-6c 
-65 
-6e 
+61 
 00 
-42 
-69 
-74 
+2e 
+4c 
 56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-66 
-72 
-6f 
-6d 
-5f 
-42 
-69 
-6e 
+4c 
+32 
 00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-66 
-72 
-6f 
-6d 
-5f 
-4f 
-63 
-74 
+2e 
+4c 
+46 
+45 
+32 
+35 
 00 
+2e 
+4c 
+46 
 42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-66 
-72 
-6f 
-6d 
-5f 
-48 
-65 
-78 
+32 
+36 
 00 
-42 
-69 
-74 
+2e 
+4c 
 56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-45 
-6d 
-70 
-74 
-79 
+4c 
+33 
 00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-4d 
-6f 
-76 
-65 
-5f 
+2e 
 4c 
-65 
-66 
-74 
+43 
+46 
+49 
+31 
 00 
-42 
-69 
-74 
+2e 
+4c 
 56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-43 
-68 
-75 
-6e 
-6b 
-5f 
-53 
-74 
-6f 
-72 
-65 
+4c 
+34 
 00 
 42 
 69 
 6f 
 72 
 5f 
-4e 
-65 
-67 
-61 
-74 
-65 
-00 
-79 
-61 
-73 
-6d 
-5f 
-78 
 66 
 72 
-65 
-65 
-00 
-79 
-61 
-73 
-6d 
-5f 
-69 
-6e 
-74 
-65 
-72 
-6e 
-61 
-6c 
-5f 
-65 
-72 
-72 
-6f 
-72 
-5f 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-43 
-6f 
-70 
-79 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
 6f 
-72 
+6d 
 5f 
 44 
-69 
-76 
-69 
-64 
-65 
-00 
-42 
-69 
-74 
-56 
 65 
 63 
-74 
-6f 
-72 
 5f 
-69 
 73 
-5f 
-65 
-6d 
-70 
-74 
-79 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-4c 
-53 
-42 
-00 
-42 
-69 
 74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-4c 
-65 
-78 
-69 
-63 
-6f 
-6d 
-70 
 61 
-72 
-65 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
 74 
-6f 
-72 
-5f 
-65 
-71 
-75 
-61 
-6c 
-00 
-79 
-61 
-73 
-6d 
-5f 
-5f 
-65 
-72 
-72 
-6f 
-72 
-00 
-42 
 69 
-74 
-56 
-65 
 63 
-74 
-6f 
-72 
 5f 
-4d 
+53 
+68 
 75 
-6c 
 74 
-69 
-70 
-6c 
-79 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-61 
-64 
 64 
+6f 
+77 
+6e 
 00 
 42 
 69 
 6f 
 72 
 5f 
-73 
-75 
-62 
-00 
-53 
-65 
-74 
-5f 
-55 
-6e 
-69 
-6f 
-6e 
-00 
-53 
-65 
-74 
-5f 
-49 
-6e 
-74 
+44 
 65 
-72 
 73 
-65 
-63 
-74 
-69 
-6f 
-6e 
-00 
-53 
-65 
 74 
-5f 
-45 
-78 
-63 
-6c 
-75 
-73 
-69 
-76 
-65 
-4f 
 72 
-00 
-53 
-65 
-74 
-5f 
-43 
 6f 
-6d 
-70 
-6c 
-65 
-6d 
-65 
-6e 
-74 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-4d 
-6f 
-76 
-65 
-5f 
-52 
-69 
-67 
-68 
-74 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-69 
-73 
-5f 
-66 
-75 
-6c 
-6c 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-53 
-69 
-67 
-6e 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-6d 
-73 
-62 
-5f 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-73 
-68 
-69 
-66 
-74 
-5f 
-72 
-69 
-67 
-68 
-74 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-64 
-65 
-63 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-49 
-6e 
-74 
-65 
-72 
-76 
-61 
-6c 
-5f 
-43 
-6f 
-70 
 79 
 00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-42 
-6c 
-6f 
-63 
-6b 
-5f 
-52 
-65 
-61 
-64 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-42 
-6c 
-6f 
-63 
-6b 
-5f 
-53 
-74 
-6f 
-72 
-65 
-00 
-6d 
-65 
-6d 
-63 
-70 
-79 
-00 
-66 
-70 
-72 
-69 
-6e 
-74 
-66 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-74 
-6f 
-5f 
-48 
-65 
-78 
-00 
-42 
-69 
-74 
-56 
-65 
-63 
-74 
-6f 
-72 
-5f 
-42 
-6f 
-6f 
-74 
-00 
-70 
-72 
-69 
-6e 
-74 
-66 
-00 
-73 
-70 
-72 
-69 
-6e 
-74 
-66 
-00 
-70 
-75 
-74 
-63 
-68 
-61 
-72 
-00 
-73 
-74 
-64 
-6f 
-75 
-74 
-00 
-66 
-66 
-6c 
-75 
-73 
-68 
-00 
-79 
-61 
-73 
-6d 
-5f 
-5f 
-78 
-73 
-74 
-72 
-64 
-75 
-70 
-00 
-2e 
-4c 
-64 
-65 
-62 
-75 
-67 
-5f 
-61 
-62 
-62 
-72 
-65 
-76 
-30 
-00 
-2e 
-4c 
-64 
-65 
-62 
-75 
-67 
-5f 
-69 
-6e 
-66 
-6f 
-30 
-00 
-2e 
-4c 
-64 
-65 
-62 
-75 
-67 
-5f 
-6c 
-69 
-6e 
-65 
-30 
-00 
-2e 
-4c 
-74 
-65 
-78 
-74 
-30 
-00 
-2e 
-4c 
-43 
-30 
-00 
-2e 
-4c 
-43 
-31 
-00 
-2e 
-4c 
-43 
-32 
-00 
-2e 
-4c 
-43 
-33 
-00 
-2e 
-4c 
-43 
-34 
-00 
-2e 
-4c 
-43 
-35 
-00 
-2e 
-4c 
-43 
-36 
-00 
-2e 
-4c 
-43 
-37 
-00 
-2e 
-4c 
-43 
-38 
-00 
-2e 
-4c 
-43 
-39 
-00 
-2e 
-4c 
-43 
-31 
-30 
-00 
-2e 
-4c 
-43 
-31 
-31 
-00 
-2e 
-4c 
-43 
-31 
-32 
-00 
-2e 
-4c 
-43 
-31 
-33 
-00 
-2e 
-4c 
-43 
-31 
-34 
-00 
-2e 
-4c 
-43 
-31 
-35 
-00 
-2e 
-4c 
-43 
-31 
-36 
-00 
-2e 
-4c 
-43 
-31 
-37 
-00 
-2e 
-4c 
-43 
-31 
-38 
-00 
-2e 
-4c 
-46 
-42 
-32 
-35 
-00 
-2e 
-4c 
-56 
-4c 
-30 
-00 
-2e 
-4c 
-43 
-46 
-49 
-30 
-00 
-2e 
-4c 
-56 
-4c 
-31 
-00 
-63 
-6f 
-6e 
-76 
-5f 
-62 
-76 
-00 
-72 
-65 
-73 
-75 
-6c 
-74 
-00 
-73 
-70 
-61 
-72 
-65 
-00 
-6f 
-70 
-31 
-73 
-74 
-61 
-74 
-69 
-63 
-00 
-6f 
-70 
-32 
-73 
-74 
-61 
-74 
-69 
-63 
-00 
-66 
-72 
-6f 
-6d 
-5f 
-64 
-65 
-63 
-5f 
-64 
-61 
-74 
-61 
-00 
-2e 
-4c 
-56 
-4c 
-32 
-00 
-2e 
-4c 
-46 
-45 
-32 
-35 
-00 
-2e 
-4c 
-46 
-42 
-32 
-36 
-00 
-2e 
-4c 
-56 
-4c 
-33 
-00 
-2e 
-4c 
-43 
-46 
-49 
-31 
-00 
-2e 
-4c 
-56 
-4c 
-34 
-00 
 2e 
 4c 
 56 
 4c 
 38 
 00 
+79 
+61 
+73 
+6d 
+5f 
+78 
+6d 
+61 
+6c 
+6c 
+6f 
+63 
+00 
 2e 
 4c 
 56 
 31 
 32 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+66 
+72 
+6f 
+6d 
+5f 
+44 
+65 
+63 
+5f 
+73 
+74 
+61 
+74 
+69 
+63 
+00 
 2e 
 4c 
 31 
 4c 
 36 
 00 
+53 
+65 
+74 
+5f 
+4d 
+61 
+78 
+00 
 2e 
 4c 
 38 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+43 
+68 
+75 
+6e 
+6b 
+5f 
+52 
+65 
+61 
+64 
+00 
 2e 
 4c 
 56 
 31 
 37 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+43 
+6c 
+6f 
+6e 
+65 
+00 
 2e 
 4c 
 56 
 32 
 32 
 00 
+79 
+61 
+73 
+6d 
+5f 
+5f 
+77 
+61 
+72 
+6e 
+69 
+6e 
+67 
+00 
 2e 
 4c 
 46 
 32 
 37 
 00 
+73 
+74 
+72 
+6c 
+65 
+6e 
+00 
 2e 
 4c 
 32 
 31 
 35 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+66 
+72 
+6f 
+6d 
+5f 
+42 
+69 
+6e 
+00 
 2e 
 4c 
 31 
 32 
 33 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+66 
+72 
+6f 
+6d 
+5f 
+4f 
+63 
+74 
+00 
 2e 
 4c 
 32 
 33 
 31 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+66 
+72 
+6f 
+6d 
+5f 
+48 
+65 
+78 
+00 
 2e 
 4c 
 33 
 36 
 31 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+45 
+6d 
+70 
+74 
+79 
+00 
 2e 
 4c 
 56 
 35 
 31 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4d 
+6f 
+76 
+65 
+5f 
+4c 
+65 
+66 
+74 
+00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+43 
+68 
+75 
+6e 
+6b 
+5f 
+53 
+74 
+6f 
+72 
+65 
+00 
 2e 
 4c 
 56 
 39 
 37 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4e 
+65 
+67 
+61 
+74 
+65 
+00 
 2e 
 4c 
 56 
 31 
 37 
 00 
+79 
+61 
+73 
+6d 
+5f 
+78 
+66 
+72 
+65 
+65 
+00 
 2e 
 4c 
 56 
 32 
 30 
 00 
+79 
+61 
+73 
+6d 
+5f 
+69 
+6e 
+74 
+65 
+72 
+6e 
+61 
+6c 
+5f 
+65 
+72 
+72 
+6f 
+72 
+5f 
+00 
 2e 
 4c 
 56 
 34 
 34 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+43 
+6f 
+70 
+79 
+00 
 2e 
 4c 
 56 
 34 
 35 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+44 
+69 
+76 
+69 
+64 
+65 
+00 
 2e 
 4c 
 56 
 35 
 30 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+69 
+73 
+5f 
+65 
+6d 
+70 
+74 
+79 
+00 
 2e 
 4c 
 31 
 34 
 35 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4c 
+53 
+42 
+00 
 2e 
 4c 
 56 
 35 
 32 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4c 
+65 
+78 
+69 
+63 
+6f 
+6d 
+70 
+61 
+72 
+65 
+00 
 2e 
 4c 
 56 
 35 
 36 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+65 
+71 
+75 
+61 
+6c 
+00 
 2e 
 4c 
 56 
 35 
 38 
 00 
+79 
+61 
+73 
+6d 
+5f 
+5f 
+65 
+72 
+72 
+6f 
+72 
+00 
 2e 
 4c 
 56 
 36 
 37 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4d 
+75 
+6c 
+74 
+69 
+70 
+6c 
+79 
+00 
 2e 
 4c 
 56 
 36 
 39 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+61 
+64 
+64 
+00 
 2e 
 4c 
 56 
 37 
 31 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+73 
+75 
+62 
+00 
 2e 
 4c 
 56 
 37 
 33 
 00 
+53 
+65 
+74 
+5f 
+55 
+6e 
+69 
+6f 
+6e 
+00 
 2e 
 4c 
 56 
 37 
 35 
 00 
+53 
+65 
+74 
+5f 
+49 
+6e 
+74 
+65 
+72 
+73 
+65 
+63 
+74 
+69 
+6f 
+6e 
+00 
 2e 
 4c 
 56 
 37 
 37 
 00 
+53 
+65 
+74 
+5f 
+45 
+78 
+63 
+6c 
+75 
+73 
+69 
+76 
+65 
+4f 
+72 
+00 
 2e 
 4c 
 56 
 38 
 30 
 00 
+53 
+65 
+74 
+5f 
+43 
+6f 
+6d 
+70 
+6c 
+65 
+6d 
+65 
+6e 
+74 
+00 
 2e 
 4c 
 56 
 38 
 34 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+4d 
+6f 
+76 
+65 
+5f 
+52 
+69 
+67 
+68 
+74 
+00 
 2e 
 4c 
 56 
 31 
 30 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+69 
+73 
+5f 
+66 
+75 
+6c 
+6c 
+00 
 2e 
 4c 
 56 
 31 
 33 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+53 
+69 
+67 
+6e 
+00 
 2e 
 4c 
 46 
 33 
 30 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+6d 
+73 
+62 
+5f 
+00 
 2e 
 4c 
 42 
 32 
 32 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+73 
+68 
+69 
+66 
+74 
+5f 
+72 
+69 
+67 
+68 
+74 
+00 
 2e 
 4c 
 56 
 42 
 36 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+64 
+65 
+63 
+00 
 2e 
 4c 
 56 
 35 
 34 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+49 
+6e 
+74 
+65 
+72 
+76 
+61 
+6c 
+5f 
+43 
+6f 
+70 
+79 
+00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+42 
+6c 
+6f 
+63 
+6b 
+5f 
+52 
+65 
+61 
+64 
+00 
 2e 
 4c 
 56 
 38 
 34 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+42 
+6c 
+6f 
+63 
+6b 
+5f 
+53 
+74 
+6f 
+72 
+65 
+00 
 2e 
 4c 
 56 
 38 
 37 
 00 
+6d 
+65 
+6d 
+63 
+70 
+79 
+00 
 2e 
 4c 
 56 
 34 
 30 
 00 
+66 
+70 
+72 
+69 
+6e 
+74 
+66 
+00 
 2e 
 4c 
 56 
 34 
 32 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+74 
+6f 
+5f 
+48 
+65 
+78 
+00 
 2e 
 4c 
 56 
 35 
 36 
 00 
+42 
+69 
+74 
+56 
+65 
+63 
+74 
+6f 
+72 
+5f 
+42 
+6f 
+6f 
+74 
+00 
 2e 
 4c 
 33 
 65 
 64 
 00 
+70 
+72 
+69 
+6e 
+74 
+66 
+00 
 2e 
 4c 
 56 
 36 
 39 
 00 
+73 
+70 
+72 
+69 
+6e 
+74 
+66 
+00 
 2e 
 4c 
 33 
 45 
 38 
 00 
+70 
+75 
+74 
+63 
+68 
+61 
+72 
+00 
+73 
+74 
+64 
+6f 
+75 
+74 
+00 
+66 
+66 
+6c 
+75 
+73 
+68 
+00 
 2e 
 4c 
 33 
 31 
 33 
 00 
+79 
+61 
+73 
+6d 
+5f 
+5f 
+78 
+73 
+74 
+72 
+64 
+75 
+70 
+00 
 2e 
 4c 
 56 
@@ -70014,7 +70014,7 @@ c0
 00 
 00 
 00 
-69 
+5b 
 19 
 00 
 00 
@@ -70038,7 +70038,7 @@ fd
 00 
 00 
 00 
-62 
+54 
 19 
 00 
 00 
@@ -70062,7 +70062,7 @@ fd
 00 
 00 
 00 
-5b 
+4d 
 19 
 00 
 00 
@@ -70086,7 +70086,7 @@ fd
 00 
 00 
 00 
-55 
+47 
 19 
 00 
 00 
@@ -70110,7 +70110,7 @@ fd
 00 
 00 
 00 
-4e 
+40 
 19 
 00 
 00 
@@ -70134,7 +70134,7 @@ df
 00 
 00 
 00 
-47 
+39 
 19 
 00 
 00 
@@ -70158,7 +70158,7 @@ db
 00 
 00 
 00 
-41 
+33 
 19 
 00 
 00 
@@ -70182,7 +70182,7 @@ d8
 00 
 00 
 00 
-3b 
+2d 
 19 
 00 
 00 
@@ -70206,7 +70206,7 @@ d6
 00 
 00 
 00 
-35 
+11 
 19 
 00 
 00 
@@ -70230,7 +70230,7 @@ bf
 00 
 00 
 00 
-2f 
+0b 
 19 
 00 
 00 
@@ -70254,7 +70254,7 @@ bf
 00 
 00 
 00 
-29 
+05 
 19 
 00 
 00 
@@ -70278,8 +70278,8 @@ bf
 00 
 00 
 00 
-21 
-19 
+f5 
+18 
 00 
 00 
 00 
@@ -70302,8 +70302,8 @@ b5
 00 
 00 
 00 
-19 
-19 
+ed 
+18 
 00 
 00 
 00 
@@ -70326,8 +70326,8 @@ b5
 00 
 00 
 00 
-13 
-19 
+e7 
+18 
 00 
 00 
 00 
@@ -70350,8 +70350,8 @@ a9
 00 
 00 
 00 
-0b 
-19 
+df 
+18 
 00 
 00 
 00 
@@ -70374,8 +70374,8 @@ a9
 00 
 00 
 00 
-05 
-19 
+d9 
+18 
 00 
 00 
 00 
@@ -70398,7 +70398,7 @@ a9
 00 
 00 
 00 
-ff 
+d3 
 18 
 00 
 00 
@@ -70422,7 +70422,7 @@ ff
 00 
 00 
 00 
-f9 
+cd 
 18 
 00 
 00 
@@ -70446,7 +70446,7 @@ f9
 00 
 00 
 00 
-f3 
+c7 
 18 
 00 
 00 
@@ -70470,7 +70470,7 @@ f3
 00 
 00 
 00 
-eb 
+bf 
 18 
 00 
 00 
@@ -70494,7 +70494,7 @@ eb
 00 
 00 
 00 
-e5 
+b9 
 18 
 00 
 00 
@@ -70518,7 +70518,7 @@ fd
 00 
 00 
 00 
-dd 
+b1 
 18 
 00 
 00 
@@ -70542,7 +70542,7 @@ dd
 00 
 00 
 00 
-d6 
+a3 
 18 
 00 
 00 
@@ -70566,7 +70566,7 @@ d6
 00 
 00 
 00 
-ce 
+9b 
 18 
 00 
 00 
@@ -70590,7 +70590,7 @@ ce
 00 
 00 
 00 
-c6 
+93 
 18 
 00 
 00 
@@ -70614,7 +70614,7 @@ c6
 00 
 00 
 00 
-be 
+8b 
 18 
 00 
 00 
@@ -70638,7 +70638,7 @@ be
 00 
 00 
 00 
-b6 
+83 
 18 
 00 
 00 
@@ -70662,7 +70662,7 @@ b6
 00 
 00 
 00 
-ae 
+7b 
 18 
 00 
 00 
@@ -70686,7 +70686,7 @@ ae
 00 
 00 
 00 
-a6 
+73 
 18 
 00 
 00 
@@ -70710,7 +70710,7 @@ a6
 00 
 00 
 00 
-9e 
+6b 
 18 
 00 
 00 
@@ -70734,7 +70734,7 @@ a6
 00 
 00 
 00 
-96 
+63 
 18 
 00 
 00 
@@ -70758,7 +70758,7 @@ a6
 00 
 00 
 00 
-8e 
+5b 
 18 
 00 
 00 
@@ -70782,7 +70782,7 @@ a6
 00 
 00 
 00 
-88 
+55 
 18 
 00 
 00 
@@ -70806,7 +70806,7 @@ a6
 00 
 00 
 00 
-80 
+3e 
 18 
 00 
 00 
@@ -70830,7 +70830,7 @@ a6
 00 
 00 
 00 
-78 
+36 
 18 
 00 
 00 
@@ -70854,7 +70854,7 @@ a6
 00 
 00 
 00 
-70 
+2e 
 18 
 00 
 00 
@@ -70878,7 +70878,7 @@ fa
 00 
 00 
 00 
-68 
+26 
 18 
 00 
 00 
@@ -70902,7 +70902,7 @@ fa
 00 
 00 
 00 
-60 
+1e 
 18 
 00 
 00 
@@ -70926,7 +70926,7 @@ f9
 00 
 00 
 00 
-58 
+16 
 18 
 00 
 00 
@@ -70950,7 +70950,7 @@ f9
 00 
 00 
 00 
-50 
+0e 
 18 
 00 
 00 
@@ -70974,7 +70974,7 @@ f8
 00 
 00 
 00 
-48 
+06 
 18 
 00 
 00 
@@ -70998,8 +70998,8 @@ f8
 00 
 00 
 00 
-40 
-18 
+fe 
+17 
 00 
 00 
 00 
@@ -71022,8 +71022,8 @@ f6
 00 
 00 
 00 
-38 
-18 
+f6 
+17 
 00 
 00 
 00 
@@ -71046,8 +71046,8 @@ f6
 00 
 00 
 00 
-30 
-18 
+ee 
+17 
 00 
 00 
 00 
@@ -71070,8 +71070,8 @@ f4
 00 
 00 
 00 
-28 
-18 
+e6 
+17 
 00 
 00 
 00 
@@ -71094,8 +71094,8 @@ f4
 00 
 00 
 00 
-20 
-18 
+de 
+17 
 00 
 00 
 00 
@@ -71118,8 +71118,8 @@ f2
 00 
 00 
 00 
-18 
-18 
+d6 
+17 
 00 
 00 
 00 
@@ -71142,8 +71142,8 @@ f2
 00 
 00 
 00 
-10 
-18 
+ce 
+17 
 00 
 00 
 00 
@@ -71166,8 +71166,8 @@ f0
 00 
 00 
 00 
-09 
-18 
+c7 
+17 
 00 
 00 
 00 
@@ -71190,8 +71190,8 @@ f0
 00 
 00 
 00 
-03 
-18 
+c1 
+17 
 00 
 00 
 00 
@@ -71214,7 +71214,7 @@ f8
 00 
 00 
 00 
-fd 
+bb 
 17 
 00 
 00 
@@ -71238,7 +71238,7 @@ eb
 00 
 00 
 00 
-f7 
+b5 
 17 
 00 
 00 
@@ -71262,7 +71262,7 @@ f7
 00 
 00 
 00 
-f1 
+af 
 17 
 00 
 00 
@@ -71286,7 +71286,7 @@ f1
 00 
 00 
 00 
-eb 
+a9 
 17 
 00 
 00 
@@ -71310,7 +71310,7 @@ e8
 00 
 00 
 00 
-e5 
+a3 
 17 
 00 
 00 
@@ -71334,7 +71334,7 @@ e8
 00 
 00 
 00 
-df 
+9d 
 17 
 00 
 00 
@@ -71358,7 +71358,7 @@ e7
 00 
 00 
 00 
-d9 
+97 
 17 
 00 
 00 
@@ -71382,7 +71382,7 @@ e5
 00 
 00 
 00 
-d3 
+91 
 17 
 00 
 00 
@@ -71406,7 +71406,7 @@ d2
 00 
 00 
 00 
-cc 
+8a 
 17 
 00 
 00 
@@ -71430,7 +71430,7 @@ f0
 00 
 00 
 00 
-c4 
+82 
 17 
 00 
 00 
@@ -71454,7 +71454,7 @@ f0
 00 
 00 
 00 
-bc 
+7a 
 17 
 00 
 00 
@@ -71478,7 +71478,7 @@ ed
 00 
 00 
 00 
-b4 
+72 
 17 
 00 
 00 
@@ -71502,7 +71502,7 @@ e9
 00 
 00 
 00 
-ac 
+6a 
 17 
 00 
 00 
@@ -71526,7 +71526,7 @@ e4
 00 
 00 
 00 
-a4 
+62 
 17 
 00 
 00 
@@ -71550,7 +71550,7 @@ df
 00 
 00 
 00 
-9c 
+5a 
 17 
 00 
 00 
@@ -71574,7 +71574,7 @@ bf
 00 
 00 
 00 
-94 
+41 
 17 
 00 
 00 
@@ -71598,7 +71598,7 @@ b3
 00 
 00 
 00 
-8c 
+39 
 17 
 00 
 00 
@@ -71622,7 +71622,7 @@ af
 00 
 00 
 00 
-84 
+29 
 17 
 00 
 00 
@@ -71646,7 +71646,7 @@ aa
 00 
 00 
 00 
-7c 
+21 
 17 
 00 
 00 
@@ -71670,7 +71670,7 @@ a4
 00 
 00 
 00 
-74 
+19 
 17 
 00 
 00 
@@ -71694,7 +71694,7 @@ a4
 00 
 00 
 00 
-6c 
+11 
 17 
 00 
 00 
@@ -71718,7 +71718,7 @@ a4
 00 
 00 
 00 
-64 
+09 
 17 
 00 
 00 
@@ -71742,7 +71742,7 @@ a4
 00 
 00 
 00 
-5c 
+01 
 17 
 00 
 00 
@@ -71766,8 +71766,8 @@ a4
 00 
 00 
 00 
-54 
-17 
+f9 
+16 
 00 
 00 
 00 
@@ -71790,8 +71790,8 @@ a4
 00 
 00 
 00 
-4e 
-17 
+f3 
+16 
 00 
 00 
 00 
@@ -71814,8 +71814,8 @@ b0
 00 
 00 
 00 
-46 
-17 
+eb 
+16 
 00 
 00 
 00 
@@ -71838,8 +71838,8 @@ b0
 00 
 00 
 00 
-40 
-17 
+e5 
+16 
 00 
 00 
 00 
@@ -71862,8 +71862,8 @@ b0
 00 
 00 
 00 
-38 
-17 
+dd 
+16 
 00 
 00 
 00 
@@ -71886,8 +71886,8 @@ b0
 00 
 00 
 00 
-30 
-17 
+d5 
+16 
 00 
 00 
 00 
@@ -71910,8 +71910,8 @@ b0
 00 
 00 
 00 
-28 
-17 
+cd 
+16 
 00 
 00 
 00 
@@ -71934,8 +71934,8 @@ b0
 00 
 00 
 00 
-20 
-17 
+c5 
+16 
 00 
 00 
 00 
@@ -71958,8 +71958,8 @@ b0
 00 
 00 
 00 
-18 
-17 
+bd 
+16 
 00 
 00 
 00 
@@ -71982,8 +71982,8 @@ b0
 00 
 00 
 00 
-10 
-17 
+b5 
+16 
 00 
 00 
 00 
@@ -72006,8 +72006,8 @@ b0
 00 
 00 
 00 
-09 
-17 
+ae 
+16 
 00 
 00 
 00 
@@ -72030,8 +72030,8 @@ b0
 00 
 00 
 00 
-03 
-17 
+a8 
+16 
 00 
 00 
 00 
@@ -72054,7 +72054,7 @@ ca
 00 
 00 
 00 
-fd 
+a2 
 16 
 00 
 00 
@@ -72078,7 +72078,7 @@ c1
 00 
 00 
 00 
-f6 
+9b 
 16 
 00 
 00 
@@ -72102,7 +72102,7 @@ f6
 00 
 00 
 00 
-ee 
+93 
 16 
 00 
 00 
@@ -72126,7 +72126,7 @@ ee
 00 
 00 
 00 
-e6 
+8b 
 16 
 00 
 00 
@@ -72150,7 +72150,7 @@ e6
 00 
 00 
 00 
-de 
+83 
 16 
 00 
 00 
@@ -72174,7 +72174,7 @@ de
 00 
 00 
 00 
-d6 
+7b 
 16 
 00 
 00 
@@ -72198,7 +72198,7 @@ d6
 00 
 00 
 00 
-ce 
+73 
 16 
 00 
 00 
@@ -72222,7 +72222,7 @@ ce
 00 
 00 
 00 
-c6 
+6b 
 16 
 00 
 00 
@@ -72246,7 +72246,7 @@ c6
 00 
 00 
 00 
-be 
+63 
 16 
 00 
 00 
@@ -72270,7 +72270,7 @@ fe
 00 
 00 
 00 
-b8 
+5d 
 16 
 00 
 00 
@@ -72294,7 +72294,7 @@ e1
 00 
 00 
 00 
-b2 
+57 
 16 
 00 
 00 
@@ -72318,7 +72318,7 @@ b2
 00 
 00 
 00 
-ac 
+51 
 16 
 00 
 00 
@@ -72342,7 +72342,7 @@ b5
 00 
 00 
 00 
-a4 
+49 
 16 
 00 
 00 
@@ -72366,7 +72366,7 @@ b5
 00 
 00 
 00 
-9e 
+43 
 16 
 00 
 00 
@@ -72390,7 +72390,7 @@ b5
 00 
 00 
 00 
-96 
+3b 
 16 
 00 
 00 
@@ -72414,7 +72414,7 @@ b5
 00 
 00 
 00 
-90 
+35 
 16 
 00 
 00 
@@ -72438,7 +72438,7 @@ b5
 00 
 00 
 00 
-8a 
+2f 
 16 
 00 
 00 
@@ -72462,7 +72462,7 @@ fe
 00 
 00 
 00 
-82 
+27 
 16 
 00 
 00 
@@ -72486,7 +72486,7 @@ fe
 00 
 00 
 00 
-7c 
+21 
 16 
 00 
 00 
@@ -72510,7 +72510,7 @@ fe
 00 
 00 
 00 
-74 
+19 
 16 
 00 
 00 
@@ -72534,7 +72534,7 @@ fe
 00 
 00 
 00 
-6c 
+11 
 16 
 00 
 00 
@@ -72558,7 +72558,7 @@ fe
 00 
 00 
 00 
-64 
+09 
 16 
 00 
 00 
@@ -72582,7 +72582,7 @@ fe
 00 
 00 
 00 
-5c 
+01 
 16 
 00 
 00 
@@ -72606,8 +72606,8 @@ fe
 00 
 00 
 00 
-54 
-16 
+f9 
+15 
 00 
 00 
 00 
@@ -72630,8 +72630,8 @@ fe
 00 
 00 
 00 
-4c 
-16 
+f1 
+15 
 00 
 00 
 00 
@@ -72654,8 +72654,8 @@ fe
 00 
 00 
 00 
-44 
-16 
+e9 
+15 
 00 
 00 
 00 
@@ -72678,8 +72678,8 @@ fe
 00 
 00 
 00 
-3d 
-16 
+e2 
+15 
 00 
 00 
 00 
@@ -72702,8 +72702,8 @@ fe
 00 
 00 
 00 
-36 
-16 
+db 
+15 
 00 
 00 
 00 
@@ -72726,8 +72726,8 @@ fe
 00 
 00 
 00 
-2e 
-16 
+d3 
+15 
 00 
 00 
 00 
@@ -72750,8 +72750,8 @@ fe
 00 
 00 
 00 
-26 
-16 
+cb 
+15 
 00 
 00 
 00 
@@ -72774,8 +72774,8 @@ fe
 00 
 00 
 00 
-1e 
-16 
+c3 
+15 
 00 
 00 
 00 
@@ -72798,8 +72798,8 @@ fe
 00 
 00 
 00 
-18 
-16 
+bd 
+15 
 00 
 00 
 00 
@@ -72822,8 +72822,8 @@ f4
 00 
 00 
 00 
-10 
-16 
+b5 
+15 
 00 
 00 
 00 
@@ -72846,8 +72846,8 @@ f4
 00 
 00 
 00 
-08 
-16 
+ad 
+15 
 00 
 00 
 00 
@@ -72870,8 +72870,8 @@ eb
 00 
 00 
 00 
-00 
-16 
+a5 
+15 
 00 
 00 
 00 
@@ -72894,7 +72894,7 @@ e2
 00 
 00 
 00 
-fa 
+9f 
 15 
 00 
 00 
@@ -72918,7 +72918,7 @@ fa
 00 
 00 
 00 
-f2 
+97 
 15 
 00 
 00 
@@ -72942,7 +72942,7 @@ cd
 00 
 00 
 00 
-ea 
+8f 
 15 
 00 
 00 
@@ -72966,7 +72966,7 @@ c2
 00 
 00 
 00 
-e2 
+87 
 15 
 00 
 00 
@@ -72990,7 +72990,7 @@ c1
 00 
 00 
 00 
-da 
+7f 
 15 
 00 
 00 
@@ -73014,7 +73014,7 @@ bd
 00 
 00 
 00 
-d2 
+77 
 15 
 00 
 00 
@@ -73038,7 +73038,7 @@ b8
 00 
 00 
 00 
-ca 
+6f 
 15 
 00 
 00 
@@ -73062,7 +73062,7 @@ b3
 00 
 00 
 00 
-c2 
+67 
 15 
 00 
 00 
@@ -73086,7 +73086,7 @@ ae
 00 
 00 
 00 
-ba 
+5f 
 15 
 00 
 00 
@@ -73110,7 +73110,7 @@ a9
 00 
 00 
 00 
-b4 
+59 
 15 
 00 
 00 
@@ -73134,7 +73134,7 @@ a5
 00 
 00 
 00 
-ac 
+51 
 15 
 00 
 00 
@@ -73158,7 +73158,7 @@ a5
 00 
 00 
 00 
-a6 
+4b 
 15 
 00 
 00 
@@ -73182,7 +73182,7 @@ a1
 00 
 00 
 00 
-9e 
+43 
 15 
 00 
 00 
@@ -73206,7 +73206,7 @@ a1
 00 
 00 
 00 
-98 
+3d 
 15 
 00 
 00 
@@ -73230,7 +73230,7 @@ f2
 00 
 00 
 00 
-90 
+35 
 15 
 00 
 00 
@@ -73254,7 +73254,7 @@ f2
 00 
 00 
 00 
-8a 
+2f 
 15 
 00 
 00 
@@ -73278,7 +73278,7 @@ f2
 00 
 00 
 00 
-82 
+27 
 15 
 00 
 00 
@@ -73302,7 +73302,7 @@ f2
 00 
 00 
 00 
-7c 
+21 
 15 
 00 
 00 
@@ -73326,7 +73326,7 @@ f2
 00 
 00 
 00 
-74 
+19 
 15 
 00 
 00 
@@ -73350,7 +73350,7 @@ f2
 00 
 00 
 00 
-6e 
+13 
 15 
 00 
 00 
@@ -73374,7 +73374,7 @@ d0
 00 
 00 
 00 
-66 
+0b 
 15 
 00 
 00 
@@ -73398,7 +73398,7 @@ d0
 00 
 00 
 00 
-60 
+05 
 15 
 00 
 00 
@@ -73422,8 +73422,8 @@ d0
 00 
 00 
 00 
-5a 
-15 
+ff 
+14 
 00 
 00 
 00 
@@ -73446,8 +73446,8 @@ d0
 00 
 00 
 00 
-52 
-15 
+f7 
+14 
 00 
 00 
 00 
@@ -73470,8 +73470,8 @@ d0
 00 
 00 
 00 
-4c 
-15 
+f1 
+14 
 00 
 00 
 00 
@@ -73494,8 +73494,8 @@ c2
 00 
 00 
 00 
-44 
-15 
+e9 
+14 
 00 
 00 
 00 
@@ -73518,8 +73518,8 @@ c2
 00 
 00 
 00 
-3c 
-15 
+e1 
+14 
 00 
 00 
 00 
@@ -73542,8 +73542,8 @@ c2
 00 
 00 
 00 
-34 
-15 
+d9 
+14 
 00 
 00 
 00 
@@ -73566,8 +73566,8 @@ c2
 00 
 00 
 00 
-2c 
-15 
+d1 
+14 
 00 
 00 
 00 
@@ -73590,8 +73590,8 @@ c2
 00 
 00 
 00 
-24 
-15 
+c9 
+14 
 00 
 00 
 00 
@@ -73614,8 +73614,8 @@ c2
 00 
 00 
 00 
-1c 
-15 
+c1 
+14 
 00 
 00 
 00 
@@ -73638,8 +73638,8 @@ c2
 00 
 00 
 00 
+b9 
 14 
-15 
 00 
 00 
 00 
@@ -73662,8 +73662,8 @@ c2
 00 
 00 
 00 
-0c 
-15 
+b1 
+14 
 00 
 00 
 00 
@@ -73686,8 +73686,8 @@ c2
 00 
 00 
 00 
-04 
-15 
+a9 
+14 
 00 
 00 
 00 
@@ -73710,7 +73710,7 @@ c2
 00 
 00 
 00 
-fd 
+a2 
 14 
 00 
 00 
@@ -73734,7 +73734,7 @@ fd
 00 
 00 
 00 
-f6 
+9b 
 14 
 00 
 00 
@@ -73758,7 +73758,7 @@ f6
 00 
 00 
 00 
-ee 
+93 
 14 
 00 
 00 
@@ -73782,7 +73782,7 @@ ee
 00 
 00 
 00 
-e8 
+8d 
 14 
 00 
 00 
@@ -73806,7 +73806,7 @@ e8
 00 
 00 
 00 
-e2 
+87 
 14 
 00 
 00 
@@ -73830,7 +73830,7 @@ e2
 00 
 00 
 00 
-da 
+7f 
 14 
 00 
 00 
@@ -73854,7 +73854,7 @@ fe
 00 
 00 
 00 
-d2 
+77 
 14 
 00 
 00 
@@ -73878,7 +73878,7 @@ ea
 00 
 00 
 00 
-ca 
+6f 
 14 
 00 
 00 
@@ -73902,7 +73902,7 @@ e5
 00 
 00 
 00 
-c2 
+67 
 14 
 00 
 00 
@@ -73926,7 +73926,7 @@ d0
 00 
 00 
 00 
-ba 
+5f 
 14 
 00 
 00 
@@ -73950,7 +73950,7 @@ ba
 00 
 00 
 00 
-b2 
+50 
 14 
 00 
 00 
@@ -73974,7 +73974,7 @@ b2
 00 
 00 
 00 
-aa 
+48 
 14 
 00 
 00 
@@ -73998,7 +73998,7 @@ aa
 00 
 00 
 00 
-a2 
+40 
 14 
 00 
 00 
@@ -74022,7 +74022,7 @@ a2
 00 
 00 
 00 
-9a 
+22 
 14 
 00 
 00 
@@ -74046,7 +74046,7 @@ a2
 00 
 00 
 00 
-92 
+1a 
 14 
 00 
 00 
@@ -74070,7 +74070,7 @@ ff
 00 
 00 
 00 
-8a 
+12 
 14 
 00 
 00 
@@ -74094,7 +74094,7 @@ fb
 00 
 00 
 00 
-82 
+0a 
 14 
 00 
 00 
@@ -74118,7 +74118,7 @@ f6
 00 
 00 
 00 
-7a 
+02 
 14 
 00 
 00 
@@ -74142,8 +74142,8 @@ f1
 00 
 00 
 00 
-72 
-14 
+fa 
+13 
 00 
 00 
 00 
@@ -74166,8 +74166,8 @@ ec
 00 
 00 
 00 
-6a 
-14 
+f2 
+13 
 00 
 00 
 00 
@@ -74190,8 +74190,8 @@ e7
 00 
 00 
 00 
-62 
-14 
+ea 
+13 
 00 
 00 
 00 
@@ -74214,8 +74214,8 @@ e2
 00 
 00 
 00 
-5c 
-14 
+e4 
+13 
 00 
 00 
 00 
@@ -74238,8 +74238,8 @@ d4
 00 
 00 
 00 
-54 
-14 
+dc 
+13 
 00 
 00 
 00 
@@ -74262,8 +74262,8 @@ bf
 00 
 00 
 00 
-4e 
-14 
+d6 
+13 
 00 
 00 
 00 
@@ -74286,8 +74286,8 @@ bf
 00 
 00 
 00 
-46 
-14 
+ce 
+13 
 00 
 00 
 00 
@@ -74310,8 +74310,8 @@ b6
 00 
 00 
 00 
-40 
-14 
+9b 
+13 
 00 
 00 
 00 
@@ -74334,8 +74334,8 @@ b6
 00 
 00 
 00 
-3a 
-14 
+95 
+13 
 00 
 00 
 00 
@@ -74358,8 +74358,8 @@ f0
 00 
 00 
 00 
-34 
-14 
+8f 
+13 
 00 
 00 
 00 
@@ -74382,8 +74382,8 @@ f0
 00 
 00 
 00 
-2e 
-14 
+89 
+13 
 00 
 00 
 00 
@@ -74406,8 +74406,8 @@ f0
 00 
 00 
 00 
-26 
-14 
+81 
+13 
 00 
 00 
 00 
@@ -74430,8 +74430,8 @@ f0
 00 
 00 
 00 
-1e 
-14 
+79 
+13 
 00 
 00 
 00 
@@ -74454,8 +74454,8 @@ f0
 00 
 00 
 00 
-18 
-14 
+73 
+13 
 00 
 00 
 00 
@@ -74478,8 +74478,8 @@ f0
 00 
 00 
 00 
-12 
-14 
+6d 
+13 
 00 
 00 
 00 
@@ -74502,8 +74502,8 @@ f0
 00 
 00 
 00 
-0c 
-14 
+67 
+13 
 00 
 00 
 00 
@@ -74526,8 +74526,8 @@ f0
 00 
 00 
 00 
-06 
-14 
+61 
+13 
 00 
 00 
 00 
@@ -74550,8 +74550,8 @@ f0
 00 
 00 
 00 
-00 
-14 
+5b 
+13 
 00 
 00 
 00 
@@ -74574,7 +74574,7 @@ f0
 00 
 00 
 00 
-fa 
+55 
 13 
 00 
 00 
@@ -74598,7 +74598,7 @@ fa
 00 
 00 
 00 
-f2 
+4d 
 13 
 00 
 00 
@@ -74622,7 +74622,7 @@ f2
 00 
 00 
 00 
-ec 
+47 
 13 
 00 
 00 
@@ -74646,7 +74646,7 @@ d0
 00 
 00 
 00 
-e6 
+41 
 13 
 00 
 00 
@@ -74670,7 +74670,7 @@ fd
 00 
 00 
 00 
-de 
+39 
 13 
 00 
 00 
@@ -74694,7 +74694,7 @@ fd
 00 
 00 
 00 
-d8 
+33 
 13 
 00 
 00 
@@ -74718,7 +74718,7 @@ d8
 00 
 00 
 00 
-d0 
+2b 
 13 
 00 
 00 
@@ -74742,7 +74742,7 @@ f7
 00 
 00 
 00 
-c8 
+23 
 13 
 00 
 00 
@@ -74766,7 +74766,7 @@ db
 00 
 00 
 00 
-c0 
+1b 
 13 
 00 
 00 
@@ -74790,7 +74790,7 @@ db
 00 
 00 
 00 
-b8 
+13 
 13 
 00 
 00 
@@ -74814,7 +74814,7 @@ d7
 00 
 00 
 00 
-b0 
+0b 
 13 
 00 
 00 
@@ -74838,7 +74838,7 @@ d4
 00 
 00 
 00 
-a8 
+03 
 13 
 00 
 00 
@@ -74862,8 +74862,8 @@ cf
 00 
 00 
 00 
-a0 
-13 
+fb 
+12 
 00 
 00 
 00 
@@ -74886,8 +74886,8 @@ c7
 00 
 00 
 00 
-98 
-13 
+f3 
+12 
 00 
 00 
 00 
@@ -74910,8 +74910,8 @@ c2
 00 
 00 
 00 
-90 
-13 
+eb 
+12 
 00 
 00 
 00 
@@ -74934,8 +74934,8 @@ ba
 00 
 00 
 00 
-88 
-13 
+e3 
+12 
 00 
 00 
 00 
@@ -74958,8 +74958,8 @@ b5
 00 
 00 
 00 
-80 
-13 
+db 
+12 
 00 
 00 
 00 
@@ -74982,8 +74982,8 @@ b0
 00 
 00 
 00 
-79 
-13 
+d4 
+12 
 00 
 00 
 00 
@@ -75006,8 +75006,8 @@ b0
 00 
 00 
 00 
-73 
-13 
+ce 
+12 
 00 
 00 
 00 
@@ -75030,8 +75030,8 @@ b8
 00 
 00 
 00 
-6d 
-13 
+c8 
+12 
 00 
 00 
 00 
@@ -75054,8 +75054,8 @@ a6
 00 
 00 
 00 
-67 
-13 
+c2 
+12 
 00 
 00 
 00 
@@ -75078,8 +75078,8 @@ a6
 00 
 00 
 00 
-61 
-13 
+bc 
+12 
 00 
 00 
 00 
@@ -75102,8 +75102,8 @@ a6
 00 
 00 
 00 
-5a 
-13 
+b5 
+12 
 00 
 00 
 00 
@@ -75126,8 +75126,8 @@ a8
 00 
 00 
 00 
-52 
-13 
+ad 
+12 
 00 
 00 
 00 
@@ -75150,8 +75150,8 @@ a3
 00 
 00 
 00 
-4a 
-13 
+a5 
+12 
 00 
 00 
 00 
@@ -75174,8 +75174,8 @@ a3
 00 
 00 
 00 
-42 
-13 
+9d 
+12 
 00 
 00 
 00 
@@ -75198,8 +75198,8 @@ a3
 00 
 00 
 00 
-3c 
-13 
+97 
+12 
 00 
 00 
 00 
@@ -75222,8 +75222,8 @@ a3
 00 
 00 
 00 
-34 
-13 
+8f 
+12 
 00 
 00 
 00 
@@ -75246,8 +75246,8 @@ a3
 00 
 00 
 00 
-2c 
-13 
+87 
+12 
 00 
 00 
 00 
@@ -75270,8 +75270,8 @@ a3
 00 
 00 
 00 
-26 
-13 
+73 
+12 
 00 
 00 
 00 
@@ -75294,8 +75294,8 @@ a3
 00 
 00 
 00 
-1e 
-13 
+6b 
+12 
 00 
 00 
 00 
@@ -75318,8 +75318,8 @@ a3
 00 
 00 
 00 
-16 
-13 
+63 
+12 
 00 
 00 
 00 
@@ -75342,8 +75342,8 @@ a3
 00 
 00 
 00 
-0e 
-13 
+5b 
+12 
 00 
 00 
 00 
@@ -75366,8 +75366,8 @@ a3
 00 
 00 
 00 
-08 
-13 
+55 
+12 
 00 
 00 
 00 
@@ -75390,8 +75390,8 @@ a3
 00 
 00 
 00 
-02 
-13 
+4f 
+12 
 00 
 00 
 00 
@@ -75414,7 +75414,7 @@ a3
 00 
 00 
 00 
-fa 
+47 
 12 
 00 
 00 
@@ -75438,7 +75438,7 @@ fa
 00 
 00 
 00 
-f4 
+2b 
 12 
 00 
 00 
@@ -75462,7 +75462,7 @@ f4
 00 
 00 
 00 
-ec 
+23 
 12 
 00 
 00 
@@ -75486,7 +75486,7 @@ ec
 00 
 00 
 00 
-e4 
+1b 
 12 
 00 
 00 
@@ -75510,7 +75510,7 @@ e4
 00 
 00 
 00 
-de 
+15 
 12 
 00 
 00 
@@ -75534,7 +75534,7 @@ de
 00 
 00 
 00 
-d6 
+0d 
 12 
 00 
 00 
@@ -75558,7 +75558,7 @@ d6
 00 
 00 
 00 
-ce 
+05 
 12 
 00 
 00 
@@ -75582,8 +75582,8 @@ ce
 00 
 00 
 00 
-c6 
-12 
+fd 
+11 
 00 
 00 
 00 
@@ -75606,8 +75606,8 @@ c6
 00 
 00 
 00 
-be 
-12 
+f5 
+11 
 00 
 00 
 00 
@@ -75630,8 +75630,8 @@ be
 00 
 00 
 00 
-b6 
-12 
+ed 
+11 
 00 
 00 
 00 
@@ -75654,8 +75654,8 @@ b6
 00 
 00 
 00 
-ae 
-12 
+e5 
+11 
 00 
 00 
 00 
@@ -75678,8 +75678,8 @@ ae
 00 
 00 
 00 
-a6 
-12 
+dd 
+11 
 00 
 00 
 00 
@@ -75702,8 +75702,8 @@ fc
 00 
 00 
 00 
-9e 
-12 
+d5 
+11 
 00 
 00 
 00 
@@ -75726,8 +75726,8 @@ f7
 00 
 00 
 00 
-96 
-12 
+cd 
+11 
 00 
 00 
 00 
@@ -75750,8 +75750,8 @@ ee
 00 
 00 
 00 
-8e 
-12 
+c5 
+11 
 00 
 00 
 00 
@@ -75774,8 +75774,8 @@ e6
 00 
 00 
 00 
-88 
-12 
+bf 
+11 
 00 
 00 
 00 
@@ -75798,8 +75798,8 @@ e6
 00 
 00 
 00 
-80 
-12 
+b7 
+11 
 00 
 00 
 00 
@@ -75822,8 +75822,8 @@ d6
 00 
 00 
 00 
-7a 
-12 
+b1 
+11 
 00 
 00 
 00 
@@ -75846,8 +75846,8 @@ e6
 00 
 00 
 00 
-74 
-12 
+ab 
+11 
 00 
 00 
 00 
@@ -75870,8 +75870,8 @@ c9
 00 
 00 
 00 
-6e 
-12 
+a5 
+11 
 00 
 00 
 00 
@@ -75894,8 +75894,8 @@ c9
 00 
 00 
 00 
-68 
-12 
+9f 
+11 
 00 
 00 
 00 
@@ -75918,8 +75918,8 @@ f7
 00 
 00 
 00 
-60 
-12 
+97 
+11 
 00 
 00 
 00 
@@ -75942,8 +75942,8 @@ c2
 00 
 00 
 00 
-5a 
-12 
+91 
+11 
 00 
 00 
 00 
@@ -75966,8 +75966,8 @@ b9
 00 
 00 
 00 
-52 
-12 
+89 
+11 
 00 
 00 
 00 
@@ -75990,8 +75990,8 @@ b9
 00 
 00 
 00 
-4a 
-12 
+81 
+11 
 00 
 00 
 00 
@@ -76014,8 +76014,8 @@ a2
 00 
 00 
 00 
-42 
-12 
+79 
+11 
 00 
 00 
 00 
@@ -76038,8 +76038,8 @@ a2
 00 
 00 
 00 
-3a 
-12 
+71 
+11 
 00 
 00 
 00 
@@ -76062,8 +76062,8 @@ a2
 00 
 00 
 00 
-34 
-12 
+6b 
+11 
 00 
 00 
 00 
@@ -76086,8 +76086,8 @@ a2
 00 
 00 
 00 
-2c 
-12 
+63 
+11 
 00 
 00 
 00 
@@ -76110,8 +76110,8 @@ a2
 00 
 00 
 00 
-24 
-12 
+5b 
+11 
 00 
 00 
 00 
@@ -76134,8 +76134,8 @@ a2
 00 
 00 
 00 
-1c 
-12 
+53 
+11 
 00 
 00 
 00 
@@ -76158,8 +76158,8 @@ a2
 00 
 00 
 00 
-14 
-12 
+4b 
+11 
 00 
 00 
 00 
@@ -76182,8 +76182,8 @@ a2
 00 
 00 
 00 
-0c 
-12 
+43 
+11 
 00 
 00 
 00 
@@ -76206,8 +76206,8 @@ a2
 00 
 00 
 00 
-04 
-12 
+3b 
+11 
 00 
 00 
 00 
@@ -76230,7 +76230,7 @@ a2
 00 
 00 
 00 
-fc 
+33 
 11 
 00 
 00 
@@ -76254,7 +76254,7 @@ fc
 00 
 00 
 00 
-f4 
+2b 
 11 
 00 
 00 
@@ -76278,7 +76278,7 @@ f4
 00 
 00 
 00 
-ec 
+23 
 11 
 00 
 00 
@@ -76302,7 +76302,7 @@ ec
 00 
 00 
 00 
-e5 
+1c 
 11 
 00 
 00 
@@ -76326,7 +76326,7 @@ e5
 00 
 00 
 00 
-de 
+15 
 11 
 00 
 00 
@@ -76350,7 +76350,7 @@ de
 00 
 00 
 00 
-d8 
+0f 
 11 
 00 
 00 
@@ -76374,7 +76374,7 @@ d8
 00 
 00 
 00 
-d0 
+07 
 11 
 00 
 00 
@@ -76398,7 +76398,7 @@ d0
 00 
 00 
 00 
-ca 
+01 
 11 
 00 
 00 
@@ -76422,8 +76422,8 @@ ca
 00 
 00 
 00 
-c2 
-11 
+f9 
+10 
 00 
 00 
 00 
@@ -76446,8 +76446,8 @@ c2
 00 
 00 
 00 
-bc 
-11 
+f3 
+10 
 00 
 00 
 00 
@@ -76470,8 +76470,8 @@ bc
 00 
 00 
 00 
-b4 
-11 
+eb 
+10 
 00 
 00 
 00 
@@ -76494,8 +76494,8 @@ b4
 00 
 00 
 00 
-ae 
-11 
+e5 
+10 
 00 
 00 
 00 
@@ -76518,8 +76518,8 @@ ae
 00 
 00 
 00 
-a6 
-11 
+dd 
+10 
 00 
 00 
 00 
@@ -76542,8 +76542,8 @@ a6
 00 
 00 
 00 
-9e 
-11 
+d5 
+10 
 00 
 00 
 00 
@@ -76566,8 +76566,8 @@ a6
 00 
 00 
 00 
-96 
-11 
+cd 
+10 
 00 
 00 
 00 
@@ -76590,8 +76590,8 @@ a6
 00 
 00 
 00 
-90 
-11 
+c7 
+10 
 00 
 00 
 00 
@@ -76614,8 +76614,8 @@ a6
 00 
 00 
 00 
-8a 
-11 
+c1 
+10 
 00 
 00 
 00 
@@ -76638,8 +76638,8 @@ a6
 00 
 00 
 00 
-82 
-11 
+b9 
+10 
 00 
 00 
 00 
@@ -76662,8 +76662,8 @@ a6
 00 
 00 
 00 
-7c 
-11 
+b3 
+10 
 00 
 00 
 00 
@@ -76686,8 +76686,8 @@ a6
 00 
 00 
 00 
-76 
-11 
+ad 
+10 
 00 
 00 
 00 
@@ -76710,8 +76710,8 @@ a6
 00 
 00 
 00 
-6e 
-11 
+96 
+10 
 00 
 00 
 00 
@@ -76734,8 +76734,8 @@ fb
 00 
 00 
 00 
-66 
-11 
+8e 
+10 
 00 
 00 
 00 
@@ -76758,8 +76758,8 @@ f0
 00 
 00 
 00 
-60 
-11 
+88 
+10 
 00 
 00 
 00 
@@ -76782,8 +76782,8 @@ ef
 00 
 00 
 00 
-58 
-11 
+80 
+10 
 00 
 00 
 00 
@@ -76806,8 +76806,8 @@ e8
 00 
 00 
 00 
-50 
-11 
+78 
+10 
 00 
 00 
 00 
@@ -76830,8 +76830,8 @@ e7
 00 
 00 
 00 
-4a 
-11 
+72 
+10 
 00 
 00 
 00 
@@ -76854,8 +76854,8 @@ e6
 00 
 00 
 00 
-42 
-11 
+6a 
+10 
 00 
 00 
 00 
@@ -76878,8 +76878,8 @@ e6
 00 
 00 
 00 
-3c 
-11 
+64 
+10 
 00 
 00 
 00 
@@ -76902,8 +76902,8 @@ e6
 00 
 00 
 00 
-34 
-11 
+5c 
+10 
 00 
 00 
 00 
@@ -76926,8 +76926,8 @@ cb
 00 
 00 
 00 
-2e 
-11 
+56 
+10 
 00 
 00 
 00 
@@ -76950,8 +76950,8 @@ e8
 00 
 00 
 00 
-26 
-11 
+4e 
+10 
 00 
 00 
 00 
@@ -76974,8 +76974,8 @@ c1
 00 
 00 
 00 
-1e 
-11 
+46 
+10 
 00 
 00 
 00 
@@ -76998,8 +76998,8 @@ c1
 00 
 00 
 00 
-16 
-11 
+3e 
+10 
 00 
 00 
 00 
@@ -77022,8 +77022,8 @@ c0
 00 
 00 
 00 
-0f 
-11 
+37 
+10 
 00 
 00 
 00 
@@ -77046,8 +77046,8 @@ c0
 00 
 00 
 00 
-08 
-11 
+30 
+10 
 00 
 00 
 00 
@@ -77070,8 +77070,8 @@ bb
 00 
 00 
 00 
-00 
-11 
+28 
+10 
 00 
 00 
 00 
@@ -77094,7 +77094,7 @@ b6
 00 
 00 
 00 
-f8 
+20 
 10 
 00 
 00 
@@ -77118,7 +77118,7 @@ ab
 00 
 00 
 00 
-f0 
+18 
 10 
 00 
 00 
@@ -77142,7 +77142,7 @@ a8
 00 
 00 
 00 
-e8 
+10 
 10 
 00 
 00 
@@ -77166,7 +77166,7 @@ a7
 00 
 00 
 00 
-e0 
+08 
 10 
 00 
 00 
@@ -77190,7 +77190,7 @@ e0
 00 
 00 
 00 
-d8 
+00 
 10 
 00 
 00 
@@ -77214,8 +77214,8 @@ d8
 00 
 00 
 00 
-d0 
-10 
+f8 
+0f 
 00 
 00 
 00 
@@ -77238,8 +77238,8 @@ d0
 00 
 00 
 00 
-ca 
-10 
+f2 
+0f 
 00 
 00 
 00 
@@ -77262,8 +77262,8 @@ a8
 00 
 00 
 00 
-c4 
-10 
+ec 
+0f 
 00 
 00 
 00 
@@ -77286,8 +77286,8 @@ a0
 00 
 00 
 00 
-bc 
-10 
+e4 
+0f 
 00 
 00 
 00 
@@ -77310,8 +77310,8 @@ bc
 00 
 00 
 00 
-b4 
-10 
+dc 
+0f 
 00 
 00 
 00 
@@ -77334,8 +77334,8 @@ b4
 00 
 00 
 00 
-ac 
-10 
+d4 
+0f 
 00 
 00 
 00 
@@ -77358,8 +77358,8 @@ ac
 00 
 00 
 00 
-a5 
-10 
+cd 
+0f 
 00 
 00 
 00 
@@ -77382,8 +77382,8 @@ a5
 00 
 00 
 00 
-9f 
-10 
+c7 
+0f 
 00 
 00 
 00 
@@ -77406,8 +77406,8 @@ a5
 00 
 00 
 00 
-98 
-10 
+c0 
+0f 
 00 
 00 
 00 
@@ -77430,8 +77430,8 @@ a5
 00 
 00 
 00 
-90 
-10 
+a9 
+0f 
 00 
 00 
 00 
@@ -77454,8 +77454,8 @@ a5
 00 
 00 
 00 
-8a 
-10 
+a3 
+0f 
 00 
 00 
 00 
@@ -77478,8 +77478,8 @@ a5
 00 
 00 
 00 
-82 
-10 
+9b 
+0f 
 00 
 00 
 00 
@@ -77502,8 +77502,8 @@ a5
 00 
 00 
 00 
-7b 
-10 
+94 
+0f 
 00 
 00 
 00 
@@ -77526,8 +77526,8 @@ a5
 00 
 00 
 00 
-74 
-10 
+8d 
+0f 
 00 
 00 
 00 
@@ -77550,8 +77550,8 @@ a5
 00 
 00 
 00 
-6c 
-10 
+85 
+0f 
 00 
 00 
 00 
@@ -77574,8 +77574,8 @@ a5
 00 
 00 
 00 
-64 
-10 
+6b 
+0f 
 00 
 00 
 00 
@@ -77598,8 +77598,8 @@ a5
 00 
 00 
 00 
-5c 
-10 
+63 
+0f 
 00 
 00 
 00 
@@ -77622,8 +77622,8 @@ a5
 00 
 00 
 00 
-54 
-10 
+5b 
+0f 
 00 
 00 
 00 
@@ -77646,8 +77646,8 @@ a5
 00 
 00 
 00 
-4e 
-10 
+55 
+0f 
 00 
 00 
 00 
@@ -77670,8 +77670,8 @@ a5
 00 
 00 
 00 
-48 
-10 
+4f 
+0f 
 00 
 00 
 00 
@@ -77694,8 +77694,8 @@ a5
 00 
 00 
 00 
-40 
-10 
+47 
+0f 
 00 
 00 
 00 
@@ -77718,8 +77718,8 @@ a5
 00 
 00 
 00 
-38 
-10 
+3f 
+0f 
 00 
 00 
 00 
@@ -77742,8 +77742,8 @@ a5
 00 
 00 
 00 
-30 
-10 
+37 
+0f 
 00 
 00 
 00 
@@ -77766,8 +77766,8 @@ a5
 00 
 00 
 00 
-29 
-10 
+30 
+0f 
 00 
 00 
 00 
@@ -77790,8 +77790,8 @@ a5
 00 
 00 
 00 
-22 
-10 
+29 
+0f 
 00 
 00 
 00 
@@ -77814,8 +77814,8 @@ a5
 00 
 00 
 00 
-1c 
-10 
+23 
+0f 
 00 
 00 
 00 
@@ -77838,8 +77838,8 @@ a5
 00 
 00 
 00 
-16 
-10 
+1d 
+0f 
 00 
 00 
 00 
@@ -77862,8 +77862,8 @@ a5
 00 
 00 
 00 
-0e 
-10 
+15 
+0f 
 00 
 00 
 00 
@@ -77886,8 +77886,8 @@ a5
 00 
 00 
 00 
-07 
-10 
+0e 
+0f 
 00 
 00 
 00 
@@ -77910,8 +77910,8 @@ a5
 00 
 00 
 00 
-00 
-10 
+07 
+0f 
 00 
 00 
 00 
@@ -77934,7 +77934,7 @@ f7
 00 
 00 
 00 
-fa 
+01 
 0f 
 00 
 00 
@@ -77958,8 +77958,8 @@ f4
 00 
 00 
 00 
-f2 
-0f 
+f9 
+0e 
 00 
 00 
 00 
@@ -77982,8 +77982,8 @@ e0
 00 
 00 
 00 
-eb 
-0f 
+f2 
+0e 
 00 
 00 
 00 
@@ -78006,8 +78006,8 @@ e0
 00 
 00 
 00 
-e4 
-0f 
+eb 
+0e 
 00 
 00 
 00 
@@ -78030,8 +78030,8 @@ db
 00 
 00 
 00 
-dc 
-0f 
+e3 
+0e 
 00 
 00 
 00 
@@ -78054,8 +78054,8 @@ da
 00 
 00 
 00 
-d4 
-0f 
+db 
+0e 
 00 
 00 
 00 
@@ -78078,8 +78078,8 @@ c3
 00 
 00 
 00 
-cc 
-0f 
+d3 
+0e 
 00 
 00 
 00 
@@ -78102,8 +78102,8 @@ c2
 00 
 00 
 00 
-c4 
-0f 
+cb 
+0e 
 00 
 00 
 00 
@@ -78126,8 +78126,8 @@ ba
 00 
 00 
 00 
-be 
-0f 
+c5 
+0e 
 00 
 00 
 00 
@@ -78150,8 +78150,8 @@ c3
 00 
 00 
 00 
-b6 
-0f 
+bd 
+0e 
 00 
 00 
 00 
@@ -78174,8 +78174,8 @@ b1
 00 
 00 
 00 
-ae 
-0f 
+b5 
+0e 
 00 
 00 
 00 
@@ -78198,8 +78198,8 @@ b1
 00 
 00 
 00 
-a6 
-0f 
+ad 
+0e 
 00 
 00 
 00 
@@ -78222,8 +78222,8 @@ b0
 00 
 00 
 00 
-9f 
-0f 
+a6 
+0e 
 00 
 00 
 00 
@@ -78246,8 +78246,8 @@ b0
 00 
 00 
 00 
-98 
-0f 
+9f 
+0e 
 00 
 00 
 00 
@@ -78270,8 +78270,8 @@ a2
 00 
 00 
 00 
-90 
-0f 
+97 
+0e 
 00 
 00 
 00 
@@ -78294,8 +78294,8 @@ a2
 00 
 00 
 00 
-88 
-0f 
+8f 
+0e 
 00 
 00 
 00 
@@ -78318,8 +78318,8 @@ a2
 00 
 00 
 00 
-80 
-0f 
+87 
+0e 
 00 
 00 
 00 
@@ -78342,8 +78342,8 @@ a2
 00 
 00 
 00 
-78 
-0f 
+7f 
+0e 
 00 
 00 
 00 
@@ -78366,8 +78366,8 @@ a2
 00 
 00 
 00 
-70 
-0f 
+77 
+0e 
 00 
 00 
 00 
@@ -78390,8 +78390,8 @@ a2
 00 
 00 
 00 
-68 
-0f 
+6f 
+0e 
 00 
 00 
 00 
@@ -78414,8 +78414,8 @@ a2
 00 
 00 
 00 
-60 
-0f 
+67 
+0e 
 00 
 00 
 00 
@@ -78438,8 +78438,8 @@ fc
 00 
 00 
 00 
-58 
-0f 
+5f 
+0e 
 00 
 00 
 00 
@@ -78462,8 +78462,8 @@ d9
 00 
 00 
 00 
-50 
-0f 
+57 
+0e 
 00 
 00 
 00 
@@ -78486,8 +78486,8 @@ cd
 00 
 00 
 00 
-48 
-0f 
+4f 
+0e 
 00 
 00 
 00 
@@ -78510,8 +78510,8 @@ a9
 00 
 00 
 00 
-40 
-0f 
+47 
+0e 
 00 
 00 
 00 
@@ -78534,8 +78534,8 @@ a9
 00 
 00 
 00 
-3a 
-0f 
+41 
+0e 
 00 
 00 
 00 
@@ -78558,8 +78558,8 @@ a9
 00 
 00 
 00 
-32 
-0f 
+39 
+0e 
 00 
 00 
 00 
@@ -78582,8 +78582,8 @@ a9
 00 
 00 
 00 
-2a 
-0f 
+31 
+0e 
 00 
 00 
 00 
@@ -78606,8 +78606,8 @@ a9
 00 
 00 
 00 
-22 
-0f 
+14 
+0e 
 00 
 00 
 00 
@@ -78630,8 +78630,8 @@ a9
 00 
 00 
 00 
-1a 
-0f 
+0c 
+0e 
 00 
 00 
 00 
@@ -78654,8 +78654,8 @@ a9
 00 
 00 
 00 
-12 
-0f 
+04 
+0e 
 00 
 00 
 00 
@@ -78678,8 +78678,8 @@ a9
 00 
 00 
 00 
-0c 
-0f 
+fe 
+0d 
 00 
 00 
 00 
@@ -78702,8 +78702,8 @@ a9
 00 
 00 
 00 
-04 
-0f 
+f6 
+0d 
 00 
 00 
 00 
@@ -78726,8 +78726,8 @@ a9
 00 
 00 
 00 
-fc 
-0e 
+df 
+0d 
 00 
 00 
 00 
@@ -78750,8 +78750,8 @@ fc
 00 
 00 
 00 
-f4 
-0e 
+d7 
+0d 
 00 
 00 
 00 
@@ -78774,8 +78774,8 @@ f1
 00 
 00 
 00 
-ec 
-0e 
+cf 
+0d 
 00 
 00 
 00 
@@ -78798,8 +78798,8 @@ ec
 00 
 00 
 00 
-e4 
-0e 
+b7 
+0d 
 00 
 00 
 00 
@@ -78822,8 +78822,8 @@ da
 00 
 00 
 00 
-dc 
-0e 
+af 
+0d 
 00 
 00 
 00 
@@ -78846,8 +78846,8 @@ d5
 00 
 00 
 00 
-d4 
-0e 
+96 
+0d 
 00 
 00 
 00 
@@ -78870,8 +78870,8 @@ c3
 00 
 00 
 00 
-cc 
-0e 
+8e 
+0d 
 00 
 00 
 00 
@@ -78894,8 +78894,8 @@ be
 00 
 00 
 00 
-c4 
-0e 
+7c 
+0d 
 00 
 00 
 00 
@@ -78918,8 +78918,8 @@ ac
 00 
 00 
 00 
-bc 
-0e 
+74 
+0d 
 00 
 00 
 00 
@@ -78942,8 +78942,8 @@ a7
 00 
 00 
 00 
-b4 
-0e 
+5e 
+0d 
 00 
 00 
 00 
@@ -78966,8 +78966,8 @@ b4
 00 
 00 
 00 
-ac 
-0e 
+56 
+0d 
 00 
 00 
 00 
@@ -78990,8 +78990,8 @@ ac
 00 
 00 
 00 
-a4 
-0e 
+40 
+0d 
 00 
 00 
 00 
@@ -79014,8 +79014,8 @@ a4
 00 
 00 
 00 
-9c 
-0e 
+38 
+0d 
 00 
 00 
 00 
@@ -79038,8 +79038,8 @@ a4
 00 
 00 
 00 
-94 
-0e 
+1d 
+0d 
 00 
 00 
 00 
@@ -79062,8 +79062,8 @@ a4
 00 
 00 
 00 
-8e 
-0e 
+17 
+0d 
 00 
 00 
 00 
@@ -79086,8 +79086,8 @@ a4
 00 
 00 
 00 
-86 
-0e 
+0f 
+0d 
 00 
 00 
 00 
@@ -79110,8 +79110,8 @@ a4
 00 
 00 
 00 
-7e 
-0e 
+07 
+0d 
 00 
 00 
 00 
@@ -79134,8 +79134,8 @@ a4
 00 
 00 
 00 
-76 
-0e 
+ff 
+0c 
 00 
 00 
 00 
@@ -79158,8 +79158,8 @@ a4
 00 
 00 
 00 
-6e 
-0e 
+f7 
+0c 
 00 
 00 
 00 
@@ -79182,8 +79182,8 @@ a4
 00 
 00 
 00 
-66 
-0e 
+ef 
+0c 
 00 
 00 
 00 
@@ -79206,8 +79206,8 @@ a4
 00 
 00 
 00 
-5e 
-0e 
+e7 
+0c 
 00 
 00 
 00 
@@ -79230,8 +79230,8 @@ a4
 00 
 00 
 00 
-56 
-0e 
+df 
+0c 
 00 
 00 
 00 
@@ -79254,8 +79254,8 @@ ff
 00 
 00 
 00 
-4e 
-0e 
+d7 
+0c 
 00 
 00 
 00 
@@ -79278,8 +79278,8 @@ f0
 00 
 00 
 00 
-46 
-0e 
+c3 
+0c 
 00 
 00 
 00 
@@ -79302,8 +79302,8 @@ e6
 00 
 00 
 00 
-3e 
-0e 
+bb 
+0c 
 00 
 00 
 00 
@@ -79326,8 +79326,8 @@ d7
 00 
 00 
 00 
-36 
-0e 
+a3 
+0c 
 00 
 00 
 00 
@@ -79350,8 +79350,8 @@ c5
 00 
 00 
 00 
-2e 
-0e 
+9b 
+0c 
 00 
 00 
 00 
@@ -79374,8 +79374,8 @@ b9
 00 
 00 
 00 
-26 
-0e 
+93 
+0c 
 00 
 00 
 00 
@@ -79398,8 +79398,8 @@ b9
 00 
 00 
 00 
-1e 
-0e 
+8b 
+0c 
 00 
 00 
 00 
@@ -79422,8 +79422,8 @@ b9
 00 
 00 
 00 
-16 
-0e 
+6d 
+0c 
 00 
 00 
 00 
@@ -79446,8 +79446,8 @@ b9
 00 
 00 
 00 
-0e 
-0e 
+65 
+0c 
 00 
 00 
 00 
@@ -79470,8 +79470,8 @@ b9
 00 
 00 
 00 
-08 
-0e 
+51 
+0c 
 00 
 00 
 00 
@@ -79494,8 +79494,8 @@ b9
 00 
 00 
 00 
-00 
-0e 
+36 
+0c 
 00 
 00 
 00 
@@ -79518,8 +79518,8 @@ b9
 00 
 00 
 00 
-f8 
-0d 
+2e 
+0c 
 00 
 00 
 00 
@@ -79542,8 +79542,8 @@ f8
 00 
 00 
 00 
-f0 
-0d 
+26 
+0c 
 00 
 00 
 00 
@@ -79566,8 +79566,8 @@ f0
 00 
 00 
 00 
-e8 
-0d 
+1e 
+0c 
 00 
 00 
 00 
@@ -79590,8 +79590,8 @@ e8
 00 
 00 
 00 
-e0 
-0d 
+16 
+0c 
 00 
 00 
 00 
@@ -79614,8 +79614,8 @@ e0
 00 
 00 
 00 
-d8 
-0d 
+fd 
+0b 
 00 
 00 
 00 
@@ -79638,8 +79638,8 @@ f9
 00 
 00 
 00 
-d0 
-0d 
+e6 
+0b 
 00 
 00 
 00 
@@ -79662,8 +79662,8 @@ b5
 00 
 00 
 00 
-c8 
-0d 
+de 
+0b 
 00 
 00 
 00 
@@ -79686,8 +79686,8 @@ ab
 00 
 00 
 00 
-c0 
-0d 
+d6 
+0b 
 00 
 00 
 00 
@@ -79710,8 +79710,8 @@ a8
 00 
 00 
 00 
-b8 
-0d 
+ce 
+0b 
 00 
 00 
 00 
@@ -79734,8 +79734,8 @@ a0
 00 
 00 
 00 
-b2 
-0d 
+c8 
+0b 
 00 
 00 
 00 
@@ -79758,8 +79758,8 @@ d0
 00 
 00 
 00 
-aa 
-0d 
+c0 
+0b 
 00 
 00 
 00 
@@ -79782,8 +79782,8 @@ aa
 00 
 00 
 00 
-a2 
-0d 
+b8 
+0b 
 00 
 00 
 00 
@@ -79806,8 +79806,8 @@ a2
 00 
 00 
 00 
-9a 
-0d 
+b0 
+0b 
 00 
 00 
 00 
@@ -79830,8 +79830,8 @@ a2
 00 
 00 
 00 
-92 
-0d 
+a8 
+0b 
 00 
 00 
 00 
@@ -79854,8 +79854,8 @@ a2
 00 
 00 
 00 
-8a 
-0d 
+a0 
+0b 
 00 
 00 
 00 
@@ -79878,8 +79878,8 @@ a2
 00 
 00 
 00 
-82 
-0d 
+98 
+0b 
 00 
 00 
 00 
@@ -79902,8 +79902,8 @@ a2
 00 
 00 
 00 
-7a 
-0d 
+90 
+0b 
 00 
 00 
 00 
@@ -79926,8 +79926,8 @@ a2
 00 
 00 
 00 
-72 
-0d 
+88 
+0b 
 00 
 00 
 00 
@@ -79950,8 +79950,8 @@ a2
 00 
 00 
 00 
-6c 
-0d 
+82 
+0b 
 00 
 00 
 00 
@@ -79974,8 +79974,8 @@ a2
 00 
 00 
 00 
-66 
-0d 
+7c 
+0b 
 00 
 00 
 00 
@@ -79998,8 +79998,8 @@ a2
 00 
 00 
 00 
-60 
-0d 
+76 
+0b 
 00 
 00 
 00 
@@ -80022,8 +80022,8 @@ e4
 00 
 00 
 00 
-5a 
-0d 
+70 
+0b 
 00 
 00 
 00 
@@ -80046,8 +80046,8 @@ e4
 00 
 00 
 00 
-54 
-0d 
+6a 
+0b 
 00 
 00 
 00 
@@ -80070,8 +80070,8 @@ e4
 00 
 00 
 00 
-4c 
-0d 
+62 
+0b 
 00 
 00 
 00 
@@ -80094,8 +80094,8 @@ e4
 00 
 00 
 00 
-46 
-0d 
+47 
+0b 
 00 
 00 
 00 
@@ -80118,8 +80118,8 @@ f0
 00 
 00 
 00 
-40 
-0d 
+41 
+0b 
 00 
 00 
 00 
@@ -80142,8 +80142,8 @@ d7
 00 
 00 
 00 
-3a 
-0d 
+3b 
+0b 
 00 
 00 
 00 
@@ -80166,8 +80166,8 @@ d7
 00 
 00 
 00 
-34 
-0d 
+35 
+0b 
 00 
 00 
 00 
@@ -80190,8 +80190,8 @@ fc
 00 
 00 
 00 
-2e 
-0d 
+2f 
+0b 
 00 
 00 
 00 
@@ -80214,8 +80214,8 @@ cd
 00 
 00 
 00 
-28 
-0d 
+29 
+0b 
 00 
 00 
 00 
@@ -80238,8 +80238,8 @@ cd
 00 
 00 
 00 
-22 
-0d 
+23 
+0b 
 00 
 00 
 00 
@@ -80262,8 +80262,8 @@ b9
 00 
 00 
 00 
-1c 
-0d 
+1d 
+0b 
 00 
 00 
 00 
@@ -80286,8 +80286,8 @@ b9
 00 
 00 
 00 
-16 
-0d 
+17 
+0b 
 00 
 00 
 00 
@@ -80310,8 +80310,8 @@ b9
 00 
 00 
 00 
-10 
-0d 
+11 
+0b 
 00 
 00 
 00 
@@ -80334,8 +80334,8 @@ b9
 00 
 00 
 00 
-0a 
-0d 
+0b 
+0b 
 00 
 00 
 00 
@@ -80358,8 +80358,8 @@ b9
 00 
 00 
 00 
-04 
-0d 
+05 
+0b 
 00 
 00 
 00 
@@ -80382,8 +80382,8 @@ b9
 00 
 00 
 00 
-fe 
-0c 
+ff 
+0a 
 00 
 00 
 00 
@@ -80406,8 +80406,8 @@ fe
 00 
 00 
 00 
-f8 
-0c 
+f9 
+0a 
 00 
 00 
 00 
@@ -80430,8 +80430,8 @@ f8
 00 
 00 
 00 
-f2 
-0c 
+f3 
+0a 
 00 
 00 
 00 
@@ -80454,8 +80454,8 @@ f1
 00 
 00 
 00 
-ec 
-0c 
+ed 
+0a 
 00 
 00 
 00 
@@ -80478,8 +80478,8 @@ da
 00 
 00 
 00 
-e6 
-0c 
+e7 
+0a 
 00 
 00 
 00 
@@ -80502,8 +80502,8 @@ c3
 00 
 00 
 00 
-e0 
-0c 
+e1 
+0a 
 00 
 00 
 00 
@@ -80526,8 +80526,8 @@ ac
 00 
 00 
 00 
-da 
-0c 
+db 
+0a 
 00 
 00 
 00 
@@ -80550,8 +80550,8 @@ da
 00 
 00 
 00 
-d4 
-0c 
+d5 
+0a 
 00 
 00 
 00 
@@ -80574,8 +80574,8 @@ d4
 00 
 00 
 00 
-ce 
-0c 
+cf 
+0a 
 00 
 00 
 00 
@@ -80598,8 +80598,8 @@ f9
 00 
 00 
 00 
-c9 
-0c 
+ca 
+0a 
 00 
 00 
 00 
@@ -80622,8 +80622,8 @@ c9
 00 
 00 
 00 
-c4 
-0c 
+c5 
+0a 
 00 
 00 
 00 
@@ -80646,8 +80646,8 @@ c4
 00 
 00 
 00 
-bf 
-0c 
+c0 
+0a 
 00 
 00 
 00 
@@ -80670,8 +80670,8 @@ bf
 00 
 00 
 00 
-ba 
-0c 
+bb 
+0a 
 00 
 00 
 00 
@@ -80694,8 +80694,8 @@ ba
 00 
 00 
 00 
-b5 
-0c 
+b6 
+0a 
 00 
 00 
 00 
@@ -80718,8 +80718,8 @@ b5
 00 
 00 
 00 
-af 
-0c 
+b0 
+0a 
 00 
 00 
 00 
@@ -80742,8 +80742,8 @@ af
 00 
 00 
 00 
-aa 
-0c 
+ab 
+0a 
 00 
 00 
 00 
@@ -80766,8 +80766,8 @@ aa
 00 
 00 
 00 
-a4 
-0c 
+a5 
+0a 
 00 
 00 
 00 
@@ -80790,8 +80790,8 @@ b5
 00 
 00 
 00 
-9f 
-0c 
+a0 
+0a 
 00 
 00 
 00 
@@ -80814,8 +80814,8 @@ b5
 00 
 00 
 00 
-97 
-0c 
+98 
+0a 
 00 
 00 
 00 
@@ -80838,8 +80838,8 @@ e3
 00 
 00 
 00 
-91 
-0c 
+92 
+0a 
 00 
 00 
 00 
@@ -80862,8 +80862,8 @@ a0
 00 
 00 
 00 
-8c 
-0c 
+8d 
+0a 
 00 
 00 
 00 
@@ -80886,8 +80886,8 @@ e3
 00 
 00 
 00 
-84 
-0c 
+85 
+0a 
 00 
 00 
 00 
@@ -80910,8 +80910,8 @@ b3
 00 
 00 
 00 
-7f 
-0c 
+80 
+0a 
 00 
 00 
 00 
@@ -80934,8 +80934,8 @@ b0
 00 
 00 
 00 
-77 
-0c 
+78 
+0a 
 00 
 00 
 00 
@@ -80958,8 +80958,8 @@ b0
 00 
 00 
 00 
-6f 
-0c 
+70 
+0a 
 00 
 00 
 00 
@@ -80982,8 +80982,8 @@ b0
 00 
 00 
 00 
-67 
-0c 
+68 
+0a 
 00 
 00 
 00 
@@ -81006,8 +81006,8 @@ b0
 00 
 00 
 00 
-5f 
-0c 
+60 
+0a 
 00 
 00 
 00 
@@ -81030,8 +81030,8 @@ b0
 00 
 00 
 00 
-59 
-0c 
+5a 
+0a 
 00 
 00 
 00 
@@ -81054,8 +81054,8 @@ a8
 00 
 00 
 00 
-51 
-0c 
+52 
+0a 
 00 
 00 
 00 
@@ -81078,8 +81078,8 @@ a8
 00 
 00 
 00 
-49 
-0c 
+4a 
+0a 
 00 
 00 
 00 
@@ -81102,8 +81102,8 @@ a8
 00 
 00 
 00 
-41 
-0c 
+42 
+0a 
 00 
 00 
 00 
@@ -81126,8 +81126,8 @@ a8
 00 
 00 
 00 
-39 
-0c 
+3a 
+0a 
 00 
 00 
 00 
@@ -81150,8 +81150,8 @@ a8
 00 
 00 
 00 
-31 
-0c 
+32 
+0a 
 00 
 00 
 00 
@@ -81174,8 +81174,8 @@ a8
 00 
 00 
 00 
-29 
-0c 
+2a 
+0a 
 00 
 00 
 00 
@@ -81198,8 +81198,8 @@ a8
 00 
 00 
 00 
-21 
-0c 
+22 
+0a 
 00 
 00 
 00 
@@ -81222,8 +81222,8 @@ a8
 00 
 00 
 00 
-19 
-0c 
+1a 
+0a 
 00 
 00 
 00 
@@ -81246,8 +81246,8 @@ a8
 00 
 00 
 00 
-11 
-0c 
+12 
+0a 
 00 
 00 
 00 
@@ -81270,8 +81270,8 @@ a8
 00 
 00 
 00 
-09 
-0c 
+0a 
+0a 
 00 
 00 
 00 
@@ -81294,8 +81294,8 @@ a8
 00 
 00 
 00 
-02 
-0c 
+03 
+0a 
 00 
 00 
 00 
@@ -81318,8 +81318,8 @@ a8
 00 
 00 
 00 
-fc 
-0b 
+fd 
+09 
 00 
 00 
 00 
@@ -81342,8 +81342,8 @@ fc
 00 
 00 
 00 
-f6 
-0b 
+f7 
+09 
 00 
 00 
 00 
@@ -81366,8 +81366,8 @@ f6
 00 
 00 
 00 
-f0 
-0b 
+f1 
+09 
 00 
 00 
 00 
@@ -81390,8 +81390,8 @@ f0
 00 
 00 
 00 
-ea 
-0b 
+eb 
+09 
 00 
 00 
 00 
@@ -81414,8 +81414,8 @@ ea
 00 
 00 
 00 
-e4 
-0b 
+e5 
+09 
 00 
 00 
 00 
@@ -81438,8 +81438,8 @@ e4
 00 
 00 
 00 
-de 
-0b 
+df 
+09 
 00 
 00 
 00 
@@ -81462,8 +81462,8 @@ de
 00 
 00 
 00 
-d8 
-0b 
+d9 
+09 
 00 
 00 
 00 
@@ -81486,8 +81486,8 @@ d8
 00 
 00 
 00 
-d1 
-0b 
+d2 
+09 
 00 
 00 
 00 
@@ -81510,8 +81510,8 @@ d1
 00 
 00 
 00 
-c9 
-0b 
+ca 
+09 
 00 
 00 
 00 
@@ -81534,8 +81534,8 @@ c9
 00 
 00 
 00 
-c1 
-0b 
+c2 
+09 
 00 
 00 
 00 
@@ -81558,8 +81558,8 @@ c1
 00 
 00 
 00 
-b9 
-0b 
+ba 
+09 
 00 
 00 
 00 
@@ -81582,8 +81582,8 @@ b9
 00 
 00 
 00 
-b1 
-0b 
+b2 
+09 
 00 
 00 
 00 
@@ -81606,8 +81606,8 @@ b1
 00 
 00 
 00 
-a9 
-0b 
+aa 
+09 
 00 
 00 
 00 
@@ -81630,8 +81630,8 @@ a9
 00 
 00 
 00 
-a1 
-0b 
+97 
+09 
 00 
 00 
 00 
@@ -81654,8 +81654,8 @@ a1
 00 
 00 
 00 
-9c 
-0b 
+92 
+09 
 00 
 00 
 00 
@@ -81678,8 +81678,8 @@ a1
 00 
 00 
 00 
-94 
-0b 
+8a 
+09 
 00 
 00 
 00 
@@ -81702,8 +81702,8 @@ a1
 00 
 00 
 00 
-8c 
-0b 
+82 
+09 
 00 
 00 
 00 
@@ -81726,8 +81726,8 @@ a1
 00 
 00 
 00 
-84 
-0b 
+7a 
+09 
 00 
 00 
 00 
@@ -81750,8 +81750,8 @@ a1
 00 
 00 
 00 
-7d 
-0b 
+73 
+09 
 00 
 00 
 00 
@@ -81774,8 +81774,8 @@ a1
 00 
 00 
 00 
-76 
-0b 
+6c 
+09 
 00 
 00 
 00 
@@ -81798,8 +81798,8 @@ a1
 00 
 00 
 00 
-6e 
-0b 
+64 
+09 
 00 
 00 
 00 
@@ -81822,8 +81822,8 @@ a1
 00 
 00 
 00 
-66 
-0b 
+5c 
+09 
 00 
 00 
 00 
@@ -81846,8 +81846,8 @@ a1
 00 
 00 
 00 
-5e 
-0b 
+54 
+09 
 00 
 00 
 00 
@@ -81870,8 +81870,8 @@ a1
 00 
 00 
 00 
-56 
-0b 
+4c 
+09 
 00 
 00 
 00 
@@ -81894,8 +81894,8 @@ ea
 00 
 00 
 00 
-4e 
-0b 
+44 
+09 
 00 
 00 
 00 
@@ -81918,8 +81918,8 @@ e9
 00 
 00 
 00 
-46 
-0b 
+3c 
+09 
 00 
 00 
 00 
@@ -81942,8 +81942,8 @@ e5
 00 
 00 
 00 
-3e 
-0b 
+34 
+09 
 00 
 00 
 00 
@@ -81966,8 +81966,8 @@ e0
 00 
 00 
 00 
-36 
-0b 
+2c 
+09 
 00 
 00 
 00 
@@ -81990,8 +81990,8 @@ c7
 00 
 00 
 00 
-2e 
-0b 
+24 
+09 
 00 
 00 
 00 
@@ -82014,8 +82014,8 @@ c6
 00 
 00 
 00 
-26 
-0b 
+1c 
+09 
 00 
 00 
 00 
@@ -82038,8 +82038,8 @@ c2
 00 
 00 
 00 
-1e 
-0b 
+14 
+09 
 00 
 00 
 00 
@@ -82062,8 +82062,8 @@ bd
 00 
 00 
 00 
-19 
-0b 
+0f 
+09 
 00 
 00 
 00 
@@ -82086,8 +82086,8 @@ f0
 00 
 00 
 00 
-14 
-0b 
+0a 
+09 
 00 
 00 
 00 
@@ -82110,8 +82110,8 @@ c7
 00 
 00 
 00 
-0c 
-0b 
+02 
+09 
 00 
 00 
 00 
@@ -82134,8 +82134,8 @@ a2
 00 
 00 
 00 
-04 
-0b 
+fa 
+08 
 00 
 00 
 00 
@@ -82158,8 +82158,8 @@ a2
 00 
 00 
 00 
-fc 
-0a 
+f2 
+08 
 00 
 00 
 00 
@@ -82182,8 +82182,8 @@ fc
 00 
 00 
 00 
-f4 
-0a 
+ea 
+08 
 00 
 00 
 00 
@@ -82206,8 +82206,8 @@ f4
 00 
 00 
 00 
-ec 
-0a 
+e2 
+08 
 00 
 00 
 00 
@@ -82230,8 +82230,8 @@ ec
 00 
 00 
 00 
-e4 
-0a 
+da 
+08 
 00 
 00 
 00 
@@ -82254,8 +82254,8 @@ e4
 00 
 00 
 00 
-dc 
-0a 
+d2 
+08 
 00 
 00 
 00 
@@ -82278,8 +82278,8 @@ dc
 00 
 00 
 00 
-d5 
-0a 
+cb 
+08 
 00 
 00 
 00 
@@ -82302,8 +82302,8 @@ d5
 00 
 00 
 00 
-ce 
-0a 
+c4 
+08 
 00 
 00 
 00 
@@ -82326,8 +82326,8 @@ ce
 00 
 00 
 00 
-c7 
-0a 
+bd 
+08 
 00 
 00 
 00 
@@ -82350,8 +82350,8 @@ c7
 00 
 00 
 00 
-c0 
-0a 
+b6 
+08 
 00 
 00 
 00 
@@ -82374,8 +82374,8 @@ c0
 00 
 00 
 00 
-b9 
-0a 
+9e 
+08 
 00 
 00 
 00 
@@ -82398,8 +82398,8 @@ b9
 00 
 00 
 00 
-b2 
-0a 
+97 
+08 
 00 
 00 
 00 
@@ -82422,8 +82422,8 @@ b2
 00 
 00 
 00 
-ab 
-0a 
+90 
+08 
 00 
 00 
 00 
@@ -82446,8 +82446,8 @@ ab
 00 
 00 
 00 
-a6 
-0a 
+8b 
+08 
 00 
 00 
 00 
@@ -82470,8 +82470,8 @@ a6
 00 
 00 
 00 
-9f 
-0a 
+84 
+08 
 00 
 00 
 00 
@@ -82494,8 +82494,8 @@ a6
 00 
 00 
 00 
-97 
-0a 
+7c 
+08 
 00 
 00 
 00 
@@ -82518,8 +82518,8 @@ a6
 00 
 00 
 00 
-90 
-0a 
+75 
+08 
 00 
 00 
 00 
@@ -82542,8 +82542,8 @@ a6
 00 
 00 
 00 
-89 
-0a 
+6e 
+08 
 00 
 00 
 00 
@@ -82566,8 +82566,8 @@ a6
 00 
 00 
 00 
-82 
-0a 
+67 
+08 
 00 
 00 
 00 
@@ -82590,8 +82590,8 @@ ff
 00 
 00 
 00 
-7b 
-0a 
+60 
+08 
 00 
 00 
 00 
@@ -82614,8 +82614,8 @@ fe
 00 
 00 
 00 
-74 
-0a 
+59 
+08 
 00 
 00 
 00 
@@ -82638,8 +82638,8 @@ e9
 00 
 00 
 00 
-6d 
-0a 
+52 
+08 
 00 
 00 
 00 
@@ -82662,8 +82662,8 @@ e1
 00 
 00 
 00 
-65 
-0a 
+4a 
+08 
 00 
 00 
 00 
@@ -82686,8 +82686,8 @@ e1
 00 
 00 
 00 
-5e 
-0a 
+43 
+08 
 00 
 00 
 00 
@@ -82710,8 +82710,8 @@ e0
 00 
 00 
 00 
-57 
-0a 
+3c 
+08 
 00 
 00 
 00 
@@ -82734,8 +82734,8 @@ e0
 00 
 00 
 00 
-50 
-0a 
+35 
+08 
 00 
 00 
 00 
@@ -82758,8 +82758,8 @@ d5
 00 
 00 
 00 
-49 
-0a 
+2e 
+08 
 00 
 00 
 00 
@@ -82782,8 +82782,8 @@ b9
 00 
 00 
 00 
-44 
-0a 
+ff 
+07 
 00 
 00 
 00 
@@ -82806,8 +82806,8 @@ b9
 00 
 00 
 00 
-3d 
-0a 
+f8 
+07 
 00 
 00 
 00 
@@ -82830,8 +82830,8 @@ b9
 00 
 00 
 00 
-36 
-0a 
+f1 
+07 
 00 
 00 
 00 
@@ -82854,8 +82854,8 @@ b9
 00 
 00 
 00 
-31 
-0a 
+dc 
+07 
 00 
 00 
 00 
@@ -82878,8 +82878,8 @@ b9
 00 
 00 
 00 
-2a 
-0a 
+d5 
+07 
 00 
 00 
 00 
@@ -82902,8 +82902,8 @@ b9
 00 
 00 
 00 
-23 
-0a 
+ce 
+07 
 00 
 00 
 00 
@@ -82926,8 +82926,8 @@ b9
 00 
 00 
 00 
-1c 
-0a 
+c7 
+07 
 00 
 00 
 00 
@@ -82950,8 +82950,8 @@ b9
 00 
 00 
 00 
-15 
-0a 
+c0 
+07 
 00 
 00 
 00 
@@ -82974,8 +82974,8 @@ b9
 00 
 00 
 00 
-0e 
-0a 
+b9 
+07 
 00 
 00 
 00 
@@ -82998,8 +82998,8 @@ b9
 00 
 00 
 00 
+b2 
 07 
-0a 
 00 
 00 
 00 
@@ -83022,8 +83022,8 @@ b9
 00 
 00 
 00 
-00 
-0a 
+ab 
+07 
 00 
 00 
 00 
@@ -83046,8 +83046,8 @@ b9
 00 
 00 
 00 
-f9 
-09 
+a4 
+07 
 00 
 00 
 00 
@@ -83070,8 +83070,8 @@ fa
 00 
 00 
 00 
-f4 
-09 
+9f 
+07 
 00 
 00 
 00 
@@ -83094,8 +83094,8 @@ f6
 00 
 00 
 00 
-ed 
-09 
+98 
+07 
 00 
 00 
 00 
@@ -83118,8 +83118,8 @@ f6
 00 
 00 
 00 
-e6 
-09 
+91 
+07 
 00 
 00 
 00 
@@ -83142,8 +83142,8 @@ eb
 00 
 00 
 00 
-e1 
-09 
+8c 
+07 
 00 
 00 
 00 
@@ -83166,8 +83166,8 @@ e6
 00 
 00 
 00 
-da 
-09 
+85 
+07 
 00 
 00 
 00 
@@ -83190,8 +83190,8 @@ e6
 00 
 00 
 00 
-d3 
-09 
+7e 
+07 
 00 
 00 
 00 
@@ -83214,8 +83214,8 @@ db
 00 
 00 
 00 
-ce 
-09 
+79 
+07 
 00 
 00 
 00 
@@ -83238,8 +83238,8 @@ d6
 00 
 00 
 00 
-c9 
-09 
+74 
+07 
 00 
 00 
 00 
@@ -83262,8 +83262,8 @@ c5
 00 
 00 
 00 
-c4 
-09 
+6f 
+07 
 00 
 00 
 00 
@@ -83286,8 +83286,8 @@ b9
 00 
 00 
 00 
-bf 
-09 
+6a 
+07 
 00 
 00 
 00 
@@ -83310,8 +83310,8 @@ c2
 00 
 00 
 00 
-ba 
-09 
+65 
+07 
 00 
 00 
 00 
@@ -83334,8 +83334,8 @@ cb
 00 
 00 
 00 
-b5 
-09 
+60 
+07 
 00 
 00 
 00 
@@ -83358,8 +83358,8 @@ b5
 00 
 00 
 00 
-b0 
-09 
+5b 
+07 
 00 
 00 
 00 
@@ -83382,8 +83382,8 @@ b0
 00 
 00 
 00 
-a9 
-09 
+54 
+07 
 00 
 00 
 00 
@@ -83406,8 +83406,8 @@ be
 00 
 00 
 00 
-a4 
-09 
+4f 
+07 
 00 
 00 
 00 
@@ -83430,8 +83430,8 @@ a4
 00 
 00 
 00 
-9f 
-09 
+4a 
+07 
 00 
 00 
 00 
@@ -83454,8 +83454,8 @@ b5
 00 
 00 
 00 
-9a 
-09 
+45 
+07 
 00 
 00 
 00 
@@ -83478,8 +83478,8 @@ b5
 00 
 00 
 00 
-95 
-09 
+40 
+07 
 00 
 00 
 00 
@@ -83502,8 +83502,8 @@ b5
 00 
 00 
 00 
-90 
-09 
+3b 
+07 
 00 
 00 
 00 
@@ -83526,8 +83526,8 @@ b5
 00 
 00 
 00 
-89 
-09 
+34 
+07 
 00 
 00 
 00 
@@ -83550,8 +83550,8 @@ b5
 00 
 00 
 00 
-82 
-09 
+2d 
+07 
 00 
 00 
 00 
@@ -83574,8 +83574,8 @@ b5
 00 
 00 
 00 
-7b 
-09 
+26 
+07 
 00 
 00 
 00 
@@ -83598,8 +83598,8 @@ b5
 00 
 00 
 00 
-74 
-09 
+1f 
+07 
 00 
 00 
 00 
@@ -83622,8 +83622,8 @@ b5
 00 
 00 
 00 
-6c 
-09 
+17 
+07 
 00 
 00 
 00 
@@ -83646,8 +83646,8 @@ b5
 00 
 00 
 00 
-64 
-09 
+0f 
+07 
 00 
 00 
 00 
@@ -83670,8 +83670,8 @@ b5
 00 
 00 
 00 
-5c 
-09 
+07 
+07 
 00 
 00 
 00 
@@ -83694,8 +83694,8 @@ b5
 00 
 00 
 00 
-54 
-09 
+ff 
+06 
 00 
 00 
 00 
@@ -83718,8 +83718,8 @@ b5
 00 
 00 
 00 
-4c 
-09 
+f7 
+06 
 00 
 00 
 00 
@@ -83742,8 +83742,8 @@ b5
 00 
 00 
 00 
-45 
-09 
+f0 
+06 
 00 
 00 
 00 
@@ -83766,8 +83766,8 @@ b5
 00 
 00 
 00 
-3e 
-09 
+e9 
+06 
 00 
 00 
 00 
@@ -83790,8 +83790,8 @@ b5
 00 
 00 
 00 
-38 
-09 
+e3 
+06 
 00 
 00 
 00 
@@ -83814,8 +83814,8 @@ b5
 00 
 00 
 00 
-31 
-09 
+dc 
+06 
 00 
 00 
 00 
@@ -83838,8 +83838,8 @@ b5
 00 
 00 
 00 
-2a 
-09 
+d5 
+06 
 00 
 00 
 00 
@@ -83862,8 +83862,8 @@ b5
 00 
 00 
 00 
-23 
-09 
+ce 
+06 
 00 
 00 
 00 
@@ -83886,8 +83886,8 @@ b5
 00 
 00 
 00 
-1c 
-09 
+c7 
+06 
 00 
 00 
 00 
@@ -83910,8 +83910,8 @@ b5
 00 
 00 
 00 
-15 
-09 
+c0 
+06 
 00 
 00 
 00 
@@ -83934,8 +83934,8 @@ b5
 00 
 00 
 00 
-0e 
-09 
+b9 
+06 
 00 
 00 
 00 
@@ -83958,8 +83958,8 @@ b5
 00 
 00 
 00 
-07 
-09 
+b2 
+06 
 00 
 00 
 00 
@@ -83982,8 +83982,8 @@ b5
 00 
 00 
 00 
-00 
-09 
+ab 
+06 
 00 
 00 
 00 
@@ -84006,8 +84006,8 @@ b5
 00 
 00 
 00 
-f9 
-08 
+a4 
+06 
 00 
 00 
 00 
@@ -84030,8 +84030,8 @@ fd
 00 
 00 
 00 
-f2 
-08 
+9d 
+06 
 00 
 00 
 00 
@@ -84054,8 +84054,8 @@ f8
 00 
 00 
 00 
-eb 
-08 
+96 
+06 
 00 
 00 
 00 
@@ -84078,8 +84078,8 @@ f4
 00 
 00 
 00 
-e6 
-08 
+91 
+06 
 00 
 00 
 00 
@@ -84102,8 +84102,8 @@ e6
 00 
 00 
 00 
-e1 
-08 
+79 
+06 
 00 
 00 
 00 
@@ -84126,8 +84126,8 @@ ae
 00 
 00 
 00 
-dc 
-08 
+74 
+06 
 00 
 00 
 00 
@@ -84150,8 +84150,8 @@ dc
 00 
 00 
 00 
-d5 
-08 
+6d 
+06 
 00 
 00 
 00 
@@ -84174,8 +84174,8 @@ d5
 00 
 00 
 00 
-ce 
-08 
+66 
+06 
 00 
 00 
 00 
@@ -84198,8 +84198,8 @@ ce
 00 
 00 
 00 
-c7 
-08 
+5f 
+06 
 00 
 00 
 00 
@@ -84222,8 +84222,8 @@ c7
 00 
 00 
 00 
-bf 
-08 
+57 
+06 
 00 
 00 
 00 
@@ -84246,8 +84246,8 @@ bf
 00 
 00 
 00 
-b8 
-08 
+50 
+06 
 00 
 00 
 00 
@@ -84270,8 +84270,8 @@ b8
 00 
 00 
 00 
-b0 
-08 
+48 
+06 
 00 
 00 
 00 
@@ -84294,8 +84294,8 @@ b0
 00 
 00 
 00 
-a8 
-08 
+40 
+06 
 00 
 00 
 00 
@@ -84318,8 +84318,8 @@ a8
 00 
 00 
 00 
-a0 
-08 
+38 
+06 
 00 
 00 
 00 
@@ -84342,8 +84342,8 @@ a0
 00 
 00 
 00 
-99 
-08 
+31 
+06 
 00 
 00 
 00 
@@ -84366,8 +84366,8 @@ a0
 00 
 00 
 00 
-92 
-08 
+2a 
+06 
 00 
 00 
 00 
@@ -84390,8 +84390,8 @@ a0
 00 
 00 
 00 
-8b 
-08 
+23 
+06 
 00 
 00 
 00 
@@ -84414,8 +84414,8 @@ a0
 00 
 00 
 00 
-84 
-08 
+1c 
+06 
 00 
 00 
 00 
@@ -84438,8 +84438,8 @@ a0
 00 
 00 
 00 
-7d 
-08 
+15 
+06 
 00 
 00 
 00 
@@ -84462,8 +84462,8 @@ a0
 00 
 00 
 00 
-76 
-08 
+0e 
+06 
 00 
 00 
 00 
@@ -84486,8 +84486,8 @@ a0
 00 
 00 
 00 
-6f 
-08 
+07 
+06 
 00 
 00 
 00 
@@ -84510,8 +84510,8 @@ a0
 00 
 00 
 00 
-68 
-08 
+00 
+06 
 00 
 00 
 00 
@@ -84534,8 +84534,8 @@ a0
 00 
 00 
 00 
-61 
-08 
+f9 
+05 
 00 
 00 
 00 
@@ -84558,8 +84558,8 @@ a0
 00 
 00 
 00 
-5a 
-08 
+f2 
+05 
 00 
 00 
 00 
@@ -84582,8 +84582,8 @@ a0
 00 
 00 
 00 
-53 
-08 
+eb 
+05 
 00 
 00 
 00 
@@ -84606,8 +84606,8 @@ a0
 00 
 00 
 00 
-4c 
-08 
+e4 
+05 
 00 
 00 
 00 
@@ -84630,8 +84630,8 @@ a0
 00 
 00 
 00 
-45 
-08 
+dd 
+05 
 00 
 00 
 00 
@@ -84654,8 +84654,8 @@ a0
 00 
 00 
 00 
-40 
-08 
+d8 
+05 
 00 
 00 
 00 
@@ -84678,8 +84678,8 @@ a0
 00 
 00 
 00 
-3b 
-08 
+c0 
+05 
 00 
 00 
 00 
@@ -84702,8 +84702,8 @@ ce
 00 
 00 
 00 
-36 
-08 
+bb 
+05 
 00 
 00 
 00 
@@ -84726,8 +84726,8 @@ ce
 00 
 00 
 00 
-2f 
-08 
+b4 
+05 
 00 
 00 
 00 
@@ -84750,8 +84750,8 @@ ba
 00 
 00 
 00 
-28 
-08 
+ad 
+05 
 00 
 00 
 00 
@@ -84774,8 +84774,8 @@ b4
 00 
 00 
 00 
-21 
-08 
+a6 
+05 
 00 
 00 
 00 
@@ -84798,8 +84798,8 @@ ab
 00 
 00 
 00 
-19 
-08 
+9e 
+05 
 00 
 00 
 00 
@@ -84822,8 +84822,8 @@ ab
 00 
 00 
 00 
-12 
-08 
+97 
+05 
 00 
 00 
 00 
@@ -84846,8 +84846,8 @@ a7
 00 
 00 
 00 
-0a 
-08 
+8f 
+05 
 00 
 00 
 00 
@@ -84870,8 +84870,8 @@ a2
 00 
 00 
 00 
-02 
-08 
+87 
+05 
 00 
 00 
 00 
@@ -84894,8 +84894,8 @@ a2
 00 
 00 
 00 
-fa 
-07 
+7f 
+05 
 00 
 00 
 00 
@@ -84918,8 +84918,8 @@ fa
 00 
 00 
 00 
-f3 
-07 
+78 
+05 
 00 
 00 
 00 
@@ -84942,8 +84942,8 @@ f3
 00 
 00 
 00 
-ec 
-07 
+71 
+05 
 00 
 00 
 00 
@@ -84966,8 +84966,8 @@ ec
 00 
 00 
 00 
-e5 
-07 
+6a 
+05 
 00 
 00 
 00 
@@ -84990,8 +84990,8 @@ e5
 00 
 00 
 00 
-de 
-07 
+63 
+05 
 00 
 00 
 00 
@@ -85014,8 +85014,8 @@ de
 00 
 00 
 00 
-d7 
-07 
+5c 
+05 
 00 
 00 
 00 
@@ -85038,8 +85038,8 @@ d7
 00 
 00 
 00 
-d0 
-07 
+55 
+05 
 00 
 00 
 00 
@@ -85062,8 +85062,8 @@ d0
 00 
 00 
 00 
-c9 
-07 
+4e 
+05 
 00 
 00 
 00 
@@ -85086,8 +85086,8 @@ c9
 00 
 00 
 00 
-c2 
-07 
+47 
+05 
 00 
 00 
 00 
@@ -85110,8 +85110,8 @@ c2
 00 
 00 
 00 
-bb 
-07 
+40 
+05 
 00 
 00 
 00 
@@ -85134,8 +85134,8 @@ bb
 00 
 00 
 00 
-b4 
-07 
+39 
+05 
 00 
 00 
 00 
@@ -85158,8 +85158,8 @@ b4
 00 
 00 
 00 
-ad 
-07 
+32 
+05 
 00 
 00 
 00 
@@ -85182,8 +85182,8 @@ ad
 00 
 00 
 00 
-a6 
-07 
+2b 
+05 
 00 
 00 
 00 
@@ -85206,8 +85206,8 @@ a6
 00 
 00 
 00 
-9f 
-07 
+24 
+05 
 00 
 00 
 00 
@@ -85230,8 +85230,8 @@ a6
 00 
 00 
 00 
-9a 
-07 
+1f 
+05 
 00 
 00 
 00 
@@ -85254,8 +85254,8 @@ a6
 00 
 00 
 00 
-95 
 07 
+05 
 00 
 00 
 00 
@@ -85278,8 +85278,8 @@ ea
 00 
 00 
 00 
-90 
-07 
+02 
+05 
 00 
 00 
 00 
@@ -85302,8 +85302,8 @@ ea
 00 
 00 
 00 
-89 
-07 
+f4 
+04 
 00 
 00 
 00 
@@ -85326,8 +85326,8 @@ da
 00 
 00 
 00 
-82 
-07 
+ed 
+04 
 00 
 00 
 00 
@@ -85350,8 +85350,8 @@ d4
 00 
 00 
 00 
-7b 
-07 
+e6 
+04 
 00 
 00 
 00 
@@ -85374,8 +85374,8 @@ cb
 00 
 00 
 00 
-74 
-07 
+df 
+04 
 00 
 00 
 00 
@@ -85398,8 +85398,8 @@ cb
 00 
 00 
 00 
-6d 
-07 
+d8 
+04 
 00 
 00 
 00 
@@ -85422,8 +85422,8 @@ c7
 00 
 00 
 00 
-66 
-07 
+d1 
+04 
 00 
 00 
 00 
@@ -85446,8 +85446,8 @@ c2
 00 
 00 
 00 
-5f 
-07 
+ca 
+04 
 00 
 00 
 00 
@@ -85470,8 +85470,8 @@ bd
 00 
 00 
 00 
-58 
-07 
+c3 
+04 
 00 
 00 
 00 
@@ -85494,8 +85494,8 @@ b5
 00 
 00 
 00 
-51 
-07 
+bc 
+04 
 00 
 00 
 00 
@@ -85518,8 +85518,8 @@ b0
 00 
 00 
 00 
-4a 
-07 
+b5 
+04 
 00 
 00 
 00 
@@ -85542,8 +85542,8 @@ b0
 00 
 00 
 00 
-43 
-07 
+ae 
+04 
 00 
 00 
 00 
@@ -85566,8 +85566,8 @@ a6
 00 
 00 
 00 
-3c 
-07 
+99 
+04 
 00 
 00 
 00 
@@ -85590,8 +85590,8 @@ a6
 00 
 00 
 00 
-35 
-07 
+92 
+04 
 00 
 00 
 00 
@@ -85614,8 +85614,8 @@ a6
 00 
 00 
 00 
-2e 
-07 
+8b 
+04 
 00 
 00 
 00 
@@ -85638,8 +85638,8 @@ a6
 00 
 00 
 00 
-27 
-07 
+84 
+04 
 00 
 00 
 00 
@@ -85662,8 +85662,8 @@ a6
 00 
 00 
 00 
-20 
-07 
+7d 
+04 
 00 
 00 
 00 
@@ -85686,8 +85686,8 @@ a6
 00 
 00 
 00 
-19 
-07 
+66 
+04 
 00 
 00 
 00 
@@ -85710,8 +85710,8 @@ a6
 00 
 00 
 00 
-12 
-07 
+5f 
+04 
 00 
 00 
 00 
@@ -85734,8 +85734,8 @@ a6
 00 
 00 
 00 
-0b 
-07 
+58 
+04 
 00 
 00 
 00 
@@ -85758,8 +85758,8 @@ a6
 00 
 00 
 00 
+51 
 04 
-07 
 00 
 00 
 00 
@@ -85782,8 +85782,8 @@ a6
 00 
 00 
 00 
-fd 
-06 
+4a 
+04 
 00 
 00 
 00 
@@ -85806,8 +85806,8 @@ fd
 00 
 00 
 00 
-f9 
-06 
+31 
+04 
 00 
 00 
 00 
@@ -85830,8 +85830,8 @@ f9
 00 
 00 
 00 
-f
-06 
+2
+04 
 00 
 00 
 00 
@@ -85854,8 +85854,8 @@ f5
 00 
 00 
 00 
-f
-06 
+2
+04 
 00 
 00 
 00 
@@ -85878,8 +85878,8 @@ f0
 00 
 00 
 00 
-e9 
-06 
+ff 
+03 
 00 
 00 
 00 
@@ -85902,8 +85902,8 @@ e9
 00 
 00 
 00 
-e2 
-06 
+f8 
+03 
 00 
 00 
 00 
@@ -85926,8 +85926,8 @@ e2
 00 
 00 
 00 
-db 
-06 
+f1 
+03 
 00 
 00 
 00 
@@ -85950,8 +85950,8 @@ f4
 00 
 00 
 00 
-d5 
-06 
+eb 
+03 
 00 
 00 
 00 
@@ -85974,8 +85974,8 @@ f4
 00 
 00 
 00 
-cf 
-06 
+d8 
+03 
 00 
 00 
 00 
@@ -85998,8 +85998,8 @@ eb
 00 
 00 
 00 
-c8 
-06 
+d1 
+03 
 00 
 00 
 00 
@@ -86022,8 +86022,8 @@ eb
 00 
 00 
 00 
-c2 
-06 
+cb 
+03 
 00 
 00 
 00 
@@ -86046,8 +86046,8 @@ e7
 00 
 00 
 00 
-bb 
-06 
+c4 
+03 
 00 
 00 
 00 
@@ -86070,8 +86070,8 @@ e2
 00 
 00 
 00 
-b4 
-06 
+bd 
+03 
 00 
 00 
 00 
@@ -86094,8 +86094,8 @@ da
 00 
 00 
 00 
-ad 
-06 
+b6 
+03 
 00 
 00 
 00 
@@ -86118,8 +86118,8 @@ d5
 00 
 00 
 00 
-a7 
-06 
+b0 
+03 
 00 
 00 
 00 
@@ -86142,8 +86142,8 @@ d0
 00 
 00 
 00 
-a0 
-06 
+a9 
+03 
 00 
 00 
 00 
@@ -86166,8 +86166,8 @@ d0
 00 
 00 
 00 
-9a 
-06 
+a3 
+03 
 00 
 00 
 00 
@@ -86214,8 +86214,8 @@ d0
 00 
 00 
 00 
-93 
-06 
+9c 
+03 
 00 
 00 
 00 
@@ -86238,8 +86238,8 @@ d0
 00 
 00 
 00 
-8d 
-06 
+96 
+03 
 00 
 00 
 00 
@@ -86262,8 +86262,8 @@ cb
 00 
 00 
 00 
-87 
-06 
+5b 
+03 
 00 
 00 
 00 
@@ -86286,8 +86286,8 @@ cb
 00 
 00 
 00 
-80 
-06 
+54 
+03 
 00 
 00 
 00 
@@ -86310,8 +86310,8 @@ cb
 00 
 00 
 00 
-7a 
-06 
+4e 
+03 
 00 
 00 
 00 
@@ -86334,8 +86334,8 @@ cb
 00 
 00 
 00 
-73 
-06 
+47 
+03 
 00 
 00 
 00 
@@ -86358,8 +86358,8 @@ cb
 00 
 00 
 00 
-6c 
-06 
+40 
+03 
 00 
 00 
 00 
@@ -86382,8 +86382,8 @@ cb
 00 
 00 
 00 
-66 
-06 
+3a 
+03 
 00 
 00 
 00 
@@ -86406,8 +86406,8 @@ cb
 00 
 00 
 00 
-58 
-06 
+2c 
+03 
 00 
 00 
 00 
@@ -86430,8 +86430,8 @@ cb
 00 
 00 
 00 
-4e 
-06 
+03 
+03 
 00 
 00 
 00 
@@ -86454,8 +86454,8 @@ cb
 00 
 00 
 00 
-44 
-06 
+f9 
+02 
 00 
 00 
 00 
@@ -86478,8 +86478,8 @@ cb
 00 
 00 
 00 
-3e 
-06 
+f3 
+02 
 00 
 00 
 00 
@@ -86502,8 +86502,8 @@ cb
 00 
 00 
 00 
-37 
-06 
+ec 
+02 
 00 
 00 
 00 
@@ -86526,8 +86526,8 @@ cb
 00 
 00 
 00 
-2f 
-06 
+e4 
+02 
 00 
 00 
 00 
@@ -86550,8 +86550,8 @@ cb
 00 
 00 
 00 
-29 
-06 
+cd 
+02 
 00 
 00 
 00 
@@ -86574,8 +86574,8 @@ cb
 00 
 00 
 00 
-22 
-06 
+c6 
+02 
 00 
 00 
 00 
@@ -86598,8 +86598,8 @@ cb
 00 
 00 
 00 
-1c 
-06 
+c0 
+02 
 00 
 00 
 00 
@@ -86622,8 +86622,8 @@ cb
 00 
 00 
 00 
-15 
-06 
+b9 
+02 
 00 
 00 
 00 
@@ -86694,8 +86694,8 @@ cb
 00 
 00 
 00 
-0f 
-06 
+b3 
+02 
 00 
 00 
 00 
@@ -86718,8 +86718,8 @@ cb
 00 
 00 
 00 
-09 
-06 
+ad 
+02 
 00 
 00 
 00 
@@ -86742,8 +86742,8 @@ cb
 00 
 00 
 00 
-03 
-06 
+a7 
+02 
 00 
 00 
 00 
@@ -86766,8 +86766,8 @@ cb
 00 
 00 
 00 
-fd 
-05 
+a1 
+02 
 00 
 00 
 00 
@@ -86790,8 +86790,8 @@ fd
 00 
 00 
 00 
-f7 
-05 
+9b 
+02 
 00 
 00 
 00 
@@ -86814,8 +86814,8 @@ f7
 00 
 00 
 00 
-f1 
-05 
+95 
+02 
 00 
 00 
 00 
@@ -86838,8 +86838,8 @@ f1
 00 
 00 
 00 
-eb 
-05 
+8f 
+02 
 00 
 00 
 00 
@@ -86862,8 +86862,8 @@ eb
 00 
 00 
 00 
-e5 
-05 
+89 
+02 
 00 
 00 
 00 
@@ -86886,8 +86886,8 @@ e5
 00 
 00 
 00 
-df 
-05 
+83 
+02 
 00 
 00 
 00 
@@ -86910,8 +86910,8 @@ df
 00 
 00 
 00 
-da 
-05 
+7e 
+02 
 00 
 00 
 00 
@@ -86934,8 +86934,8 @@ da
 00 
 00 
 00 
-d5 
-05 
+79 
+02 
 00 
 00 
 00 
@@ -86958,8 +86958,8 @@ d5
 00 
 00 
 00 
-d0 
-05 
+74 
+02 
 00 
 00 
 00 
@@ -86982,8 +86982,8 @@ d0
 00 
 00 
 00 
-cb 
-05 
+6f 
+02 
 00 
 00 
 00 
@@ -87006,8 +87006,8 @@ cb
 00 
 00 
 00 
-c6 
-05 
+6a 
+02 
 00 
 00 
 00 
@@ -87030,8 +87030,8 @@ c6
 00 
 00 
 00 
-c1 
-05 
+65 
+02 
 00 
 00 
 00 
@@ -87054,8 +87054,8 @@ c1
 00 
 00 
 00 
-bc 
-05 
+60 
+02 
 00 
 00 
 00 
@@ -87078,8 +87078,8 @@ bc
 00 
 00 
 00 
-b7 
-05 
+5b 
+02 
 00 
 00 
 00 
@@ -87102,8 +87102,8 @@ b7
 00 
 00 
 00 
-b2 
-05 
+56 
+02 
 00 
 00 
 00 
@@ -87150,8 +87150,8 @@ b2
 00 
 00 
 00 
-ad 
-05 
+51 
+02 
 00 
 00 
 00 
@@ -87222,8 +87222,8 @@ ad
 00 
 00 
 00 
-a5 
-05 
+49 
+02 
 00 
 00 
 00 
@@ -87246,8 +87246,8 @@ a5
 00 
 00 
 00 
-97 
-05 
+3b 
+02 
 00 
 00 
 00 
@@ -87294,8 +87294,8 @@ a5
 00 
 00 
 00 
-89 
-05 
+2d 
+02 
 00 
 00 
 00 
@@ -87342,8 +87342,8 @@ a5
 00 
 00 
 00 
-79 
-05 
+1d 
+02 
 00 
 00 
 00 
 00 
 00 
 00 
+d3 
+02 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+0d 
+03 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
 2c 
 00 
 00 
 00 
 00 
 00 
+61 
+03 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+84 
+03 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
 40 
 00 
 00 
 00 
 00 
 00 
-57 
+de 
+03 
 00 
 00 
+10 
 00 
-12 
 00 
-04 
 00 
-b0 
-01 
 00 
 00 
 00 
 00 
 00 
 00 
-d6 
 00 
 00 
 00 
 00 
 00 
 00 
-6e 
 00 
 00 
 00 
-12 
-00 
+06 
 04 
 00 
-90 
-02 
 00 
+10 
 00 
 00 
 00 
 00 
 00 
-d6 
 00 
 00 
 00 
 00 
 00 
 00 
-85 
 00 
 00 
 00 
-12 
 00 
-04 
 00 
-70 
-03 
 00 
 00 
+29 
+04 
 00 
 00 
+10 
 00 
 00 
-d6 
 00 
 00 
 00 
 00 
 00 
 00 
-9c 
 00 
 00 
 00 
-12 
 00 
-04 
 00 
-50 
-04 
 00 
 00 
 00 
 00 
 00 
+35 
+04 
 00 
-85 
-01 
 00 
+10 
 00 
 00 
 00 
 00 
 00 
-be 
 00 
 00 
 00 
-12 
 00 
-04 
 00 
-e0 
-05 
 00 
 00 
 00 
 00 
 00 
 00 
-1f 
 00 
 00 
 00 
+6d 
+04 
 00 
 00 
+10 
 00 
 00 
-d6 
 00 
 00 
 00 
-12 
 00 
-04 
 00 
 00 
-06 
 00 
 00 
 00 
 00 
 00 
 00 
-71 
 00 
 00 
 00 
 00 
 00 
+a0 
+04 
 00 
 00 
-ed 
+10 
 00 
 00 
 00 
-12 
 00 
-04 
 00 
-80 
-06 
 00 
 00 
 00 
 00 
 00 
 00 
-9b 
 00 
 00 
 00 
@@ -87654,7 +87725,8 @@ ed
 00 
 00 
 00 
-fe 
+00 
+57 
 00 
 00 
 00 
 00 
 04 
 00 
-20 
-07 
-00 
-00 
+b0 
+01 
 00 
 00 
 00 
 00 
-2e 
 00 
 00 
+d6 
 00 
 00 
 00 
 00 
 00 
-12 
-01 
 00 
 00 
-12 
-00 
+fb 
 04 
 00 
-50 
-07 
 00 
+10 
 00 
 00 
 00 
 00 
 00 
-52 
-05 
 00 
 00 
 00 
 00 
 00 
 00 
-23 
-01 
 00 
 00 
-12 
 00 
-04 
 00 
-b0 
-0c 
 00 
 00 
 00 
 00 
+0c 
+05 
 00 
 00 
-2b 
+10 
 00 
 00 
 00 
 00 
 00 
 00 
-34 
-01 
-00 
-00 
-12 
-00 
-04 
-00 
-e0 
-0c 
 00 
 00 
 00 
 00 
 00 
 00 
-17 
 00 
 00 
 00 
 00 
 00 
 00 
+6e 
 00 
-48 
-01 
 00 
 00 
 12 
 00 
 04 
 00 
-0
-0d 
+9
+02 
 00 
 00 
 00 
 00 
 00 
 00 
-1
+d
 00 
 00 
 00 
 00 
 00 
 00 
-5c 
-01 
+c5 
+05 
 00 
 00 
-12 
+10 
 00 
-04 
 00 
-20 
-0d 
 00 
 00 
 00 
 00 
 00 
 00 
-2b 
 00 
 00 
 00 
 00 
 00 
 00 
-70 
-01 
 00 
 00 
-12 
 00 
-04 
-00 
-50 
-0d 
-00 
-00 
-00 
-00 
-00 
-00 
-1b 
 00 
+85 
 00 
 00 
 00 
+12 
 00 
+04 
 00 
+70 
+03 
 00 
-81 
-01 
 00 
 00 
-12 
 00 
-04 
 00 
-70 
-0d 
 00 
+d6 
 00 
 00 
 00 
 00 
 00 
-4b 
 00 
 00 
+7e 
+06 
 00 
 00 
+10 
 00 
 00 
 00 
-96 
-01 
 00 
 00 
-12 
 00 
-04 
 00 
-c0 
-0d 
 00 
 00 
 00 
 00 
 00 
 00 
-95 
 00 
 00 
 00 
 00 
 00 
 00 
+9c 
 00 
-aa 
-01 
 00 
 00 
 12 
 00 
 04 
 00 
-6
-0e 
+5
+04 
 00 
 00 
 00 
 00 
 00 
 00 
-48 
+85 
 01 
 00 
 00 
 00 
 00 
 00 
-c1 
-01 
-00 
+e1 
+07 
 00 
-12 
 00 
-04 
+10 
 00 
-b0 
-0f 
 00 
 00 
 00 
 00 
 00 
 00 
-7d 
-02 
 00 
 00 
 00 
 00 
 00 
 00 
-d7 
-01 
 00 
 00 
-12 
-00 
-04 
 00 
-30 
-12 
 00 
 00 
 00 
+04 
+08 
 00 
 00 
+10 
 00 
-21 
-01 
 00 
 00 
 00 
 00 
 00 
 00 
-ee 
-01 
 00 
 00 
-12 
 00 
-04 
 00 
-60 
-13 
 00 
 00 
 00 
 00 
 00 
 00 
-e2 
 00 
 00 
+18 
+08 
 00 
 00 
+10 
 00 
 00 
 00 
-06 
-02 
 00 
 00 
-12 
 00 
-04 
 00 
-50 
-14 
 00 
 00 
 00 
 00 
 00 
 00 
-a0 
 00 
 00 
 00 
 00 
 00 
 00 
+be 
 00 
-18 
-02 
 00 
 00 
 12 
 00 
 04 
 00 
-f
-14 
+e
+05 
 00 
 00 
 00 
 00 
 00 
 00 
-2b 
-03 
-00 
+1f 
 00 
 00 
 00 
 00 
 00 
-1d 
-02 
 00 
 00 
-10 
+d6 
 00 
 00 
 00 
+12 
 00 
+04 
 00 
 00 
+06 
 00 
 00 
 00 
 00 
 00 
 00 
+71 
 00 
 00 
 00 
@@ -88038,8 +88038,8 @@ f0
 00 
 00 
 00 
-2e 
-02 
+a5 
+08 
 00 
 00 
 10 
 00 
 00 
 00 
-4d 
-02 
-00 
-00 
-10 
-00 
-00 
-00 
-00 
+ed 
 00 
 00 
 00 
+12 
 00 
+04 
 00 
+80 
+06 
 00 
 00 
 00 
 00 
 00 
 00 
+9b 
 00 
 00 
 00 
 00 
-70 
-02 
 00 
 00 
-10 
 00 
+fe 
 00 
 00 
 00 
+12 
 00 
+04 
 00 
+20 
+07 
 00 
 00 
 00 
 00 
 00 
 00 
+2e 
 00 
 00 
 00 
@@ -88110,8 +88110,8 @@ f0
 00 
 00 
 00 
-82 
-02 
+9f 
+09 
 00 
 00 
 10 
 00 
 00 
 00 
-8f 
-02 
-00 
-00 
-10 
-00 
-00 
-00 
+12 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+50 
+07 
 00 
 00 
 00 
 00 
 00 
 00 
+52 
+05 
 00 
 00 
 00 
 00 
 00 
 00 
-a9 
-02 
+4d 
+0b 
 00 
 00 
 10 
@@ -88182,8 +88182,8 @@ a9
 00 
 00 
 00 
-b1 
-02 
+ee 
+0b 
 00 
 00 
 10 
@@ -88206,8 +88206,8 @@ b1
 00 
 00 
 00 
-c6 
-02 
+05 
+0c 
 00 
 00 
 10 
@@ -88230,8 +88230,8 @@ c6
 00 
 00 
 00 
-d6 
-02 
+3e 
+0c 
 00 
 00 
 10 
@@ -88254,8 +88254,8 @@ d6
 00 
 00 
 00 
-e4 
-02 
+57 
+0c 
 00 
 00 
 10 
@@ -88278,8 +88278,8 @@ e4
 00 
 00 
 00 
-eb 
-02 
+75 
+0c 
 00 
 00 
 10 
@@ -88302,8 +88302,8 @@ eb
 00 
 00 
 00 
-fe 
-02 
+ab 
+0c 
 00 
 00 
 10 
@@ -88326,8 +88326,8 @@ fe
 00 
 00 
 00 
-11 
-03 
+cb 
+0c 
 00 
 00 
 10 
@@ -88350,8 +88350,8 @@ fe
 00 
 00 
 00 
-24 
-03 
+25 
+0d 
 00 
 00 
 10 
@@ -88374,8 +88374,8 @@ fe
 00 
 00 
 00 
-34 
-03 
+48 
+0d 
 00 
 00 
 10 
@@ -88398,8 +88398,8 @@ fe
 00 
 00 
 00 
-48 
-03 
+66 
+0d 
 00 
 00 
 10 
@@ -88422,8 +88422,8 @@ fe
 00 
 00 
 00 
-5e 
-03 
+84 
+0d 
 00 
 00 
 10 
@@ -88446,8 +88446,8 @@ fe
 00 
 00 
 00 
-6f 
-03 
+9e 
+0d 
 00 
 00 
 10 
@@ -88470,8 +88470,8 @@ fe
 00 
 00 
 00 
-7a 
-03 
+bf 
+0d 
 00 
 00 
 10 
@@ -88494,8 +88494,8 @@ fe
 00 
 00 
 00 
-8f 
-03 
+e7 
+0d 
 00 
 00 
 10 
@@ -88518,8 +88518,8 @@ fe
 00 
 00 
 00 
-9e 
-03 
+1c 
+0e 
 00 
 00 
 10 
 00 
 00 
 00 
-af 
-03 
-00 
-00 
-10 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
+23 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+b0 
+0c 
 00 
 00 
-c2 
-03 
 00 
 00 
-10 
 00 
 00 
+2b 
 00 
 00 
 00 
 00 
 00 
 00 
+34 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+e0 
+0c 
 00 
 00 
 00 
 00 
 00 
 00 
-d0 
-03 
+17 
 00 
 00 
-10 
 00 
 00 
 00 
 00 
 00 
+48 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
 00 
+0d 
 00 
 00 
 00 
 00 
 00 
 00 
+16 
 00 
 00 
 00 
-e6 
-03 
 00 
 00 
-10 
 00 
 00 
+5c 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+20 
+0d 
 00 
 00 
 00 
 00 
 00 
 00 
+2b 
 00 
 00 
 00 
@@ -88638,8 +88638,8 @@ e6
 00 
 00 
 00 
-f6 
-03 
+73 
+0f 
 00 
 00 
 10 
 00 
 00 
 00 
-02 
-04 
-00 
-00 
-10 
-00 
-00 
+70 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+50 
+0d 
 00 
 00 
 00 
 00 
 00 
 00 
+1b 
 00 
 00 
 00 
@@ -88686,8 +88686,8 @@ f6
 00 
 00 
 00 
-15 
-04 
+b1 
+0f 
 00 
 00 
 10 
 00 
 00 
 00 
-23 
-04 
-00 
+81 
+01 
 00 
-10 
 00 
+12 
 00 
+04 
 00 
+70 
+0d 
 00 
 00 
 00 
 00 
 00 
 00 
+4b 
 00 
 00 
 00 
 00 
 00 
 00 
+96 
+01 
 00 
 00 
+12 
 00 
-31 
 04 
 00 
-00 
-10 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
+c0 
+0d 
 00 
 00 
 00 
 00 
 00 
 00 
+95 
 00 
 00 
 00 
 00 
 00 
-3b 
-04 
 00 
 00 
+9e 
 10 
 00 
 00 
+10 
 00 
 00 
 00 
 00 
 00 
 00 
-4c 
-04 
-00 
-00 
-10 
-00 
 00 
 00 
+aa 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+60 
+0e 
 00 
 00 
 00 
 00 
 00 
 00 
+48 
+01 
 00 
 00 
 00 
 00 
 00 
 00 
-5c 
-04 
+31 
+12 
 00 
 00 
 10 
@@ -88830,8 +88830,8 @@ f6
 00 
 00 
 00 
-6b 
-04 
+79 
+12 
 00 
 00 
 10 
 00 
 00 
 00 
-80 
-04 
-00 
-00 
-10 
-00 
-00 
-00 
+c1 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+b0 
+0f 
 00 
 00 
 00 
 00 
 00 
 00 
+7d 
+02 
 00 
 00 
 00 
 00 
 00 
 00 
-92 
-04 
+a1 
+13 
 00 
 00 
 10 
@@ -88902,8 +88902,8 @@ f6
 00 
 00 
 00 
-a1 
-04 
+b9 
+13 
 00 
 00 
 10 
@@ -88926,8 +88926,8 @@ a1
 00 
 00 
 00 
-b0 
-0
+2a 
+1
 00 
 00 
 10 
@@ -88950,8 +88950,8 @@ b0
 00 
 00 
 00 
-c6 
-0
+58 
+1
 00 
 00 
 10 
 00 
 00 
 00 
-d4 
-04 
-00 
-00 
-10 
+d7 
+01 
 00 
 00 
+12 
 00 
+04 
 00 
+30 
+12 
 00 
 00 
 00 
 00 
 00 
 00 
+21 
+01 
 00 
 00 
 00 
 00 
 00 
 00 
+ee 
+01 
 00 
 00 
+12 
 00 
-ec 
 04 
 00 
-00 
-10 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
+60 
+13 
 00 
 00 
 00 
 00 
 00 
 00 
+e2 
 00 
 00 
 00 
-01 
-05 
 00 
 00 
-10 
 00 
 00 
+06 
+02 
 00 
 00 
+12 
 00 
+04 
 00 
+50 
+14 
 00 
 00 
 00 
 00 
 00 
 00 
+a0 
 00 
 00 
 00 
@@ -89046,8 +89046,8 @@ ec
 00 
 00 
 00 
+31 
 17 
-05 
 00 
 00 
 10 
@@ -89070,8 +89070,8 @@ ec
 00 
 00 
 00 
-1e 
-05 
+49 
+17 
 00 
 00 
 10 
 00 
 00 
 00 
-26 
-05 
-00 
-00 
-10 
-00 
-00 
-00 
+18 
+02 
 00 
 00 
+12 
 00 
+04 
 00 
+f0 
+14 
 00 
 00 
 00 
 00 
 00 
 00 
+2b 
+03 
 00 
 00 
 00 
 00 
 00 
 00 
-37 
-05 
+46 
+18 
 00 
 00 
 10 
@@ -89142,8 +89142,8 @@ ec
 00 
 00 
 00 
-46 
-05 
+aa 
+18 
 00 
 00 
 10 
@@ -89166,8 +89166,8 @@ ec
 00 
 00 
 00 
-4
-05 
+f
+18 
 00 
 00 
 10 
@@ -89190,8 +89190,8 @@ ec
 00 
 00 
 00 
-55 
-05 
+17 
+19 
 00 
 00 
 10 
@@ -89214,8 +89214,8 @@ ec
 00 
 00 
 00 
-5d 
-05 
+1f 
+19 
 00 
 00 
 10 
@@ -89238,8 +89238,8 @@ ec
 00 
 00 
 00 
-64 
-05 
+26 
+19 
 00 
 00 
 10 
@@ -89262,8 +89262,8 @@ ec
 00 
 00 
 00 
-6b 
-05 
+62 
+19 
 00 
 00 
 10 
index c00bbe1ed1e9ed39eaad889967eab50d336d1263..d383da2ab1c1ec9fdfce619e53169df8c8dd8e9d 100644 (file)
@@ -4,6 +4,8 @@
 -:10: warning: unrecognized section attribute: `M'
 -:10: warning: unrecognized section attribute: `S'
 -:10: warning: Unrecognized qualifier `progbits'
+-:24: warning: directive `.type' not recognized
+-:152: warning: directive `.size' not recognized
 -:153: warning: Unrecognized qualifier `progbits'
 -:190: warning: Unrecognized qualifier `progbits'
 -:232: warning: Unrecognized qualifier `progbits'
index 9ddf776d4805d61f3e4a4fc516f4b8241153fbc1..4476693463365f4a54fc1363d06eaa8d708a4e45 100644 (file)
@@ -48,13 +48,6 @@ null_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt)
     yasm_xfree(dbgfmt);
 }
 
-static int
-null_dbgfmt_directive(yasm_object *object, const char *name,
-                     yasm_valparamhead *valparams, unsigned long line)
-{
-    return 1;
-}
-
 static void
 null_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap,
                     yasm_errwarns *errwarns)
@@ -66,8 +59,8 @@ null_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap,
 yasm_dbgfmt_module yasm_null_LTX_dbgfmt = {
     "No debugging info",
     "null",
+    NULL,      /* no directives */
     null_dbgfmt_create,
     null_dbgfmt_destroy,
-    null_dbgfmt_directive,
     null_dbgfmt_generate
 };
index 5bf6b8adb3952b65a396a77b5a00d94746567d96..1942d4b1a0873c23ca2afd450eec6a40f16b5675 100644 (file)
@@ -499,19 +499,12 @@ stabs_bc_str_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span,
     return 0;
 }
 
-static int
-stabs_dbgfmt_directive(yasm_object *object, const char *name,
-                      yasm_valparamhead *valparams, unsigned long line)
-{
-    return 1;
-}
-
 /* Define dbgfmt structure -- see dbgfmt.h for details */
 yasm_dbgfmt_module yasm_stabs_LTX_dbgfmt = {
     "Stabs debugging format",
     "stabs",
+    NULL,      /* no directives */
     stabs_dbgfmt_create,
     stabs_dbgfmt_destroy,
-    stabs_dbgfmt_directive,
     stabs_dbgfmt_generate
 };
index b98ac63a09b8ff586aea9b9928a7612a876cd21f..b3b1262892fb35ba2a141ed419b6299e2dcaa333 100644 (file)
@@ -85,6 +85,7 @@ bin_objfmt_align_section(yasm_section *sect, yasm_section *prevsect,
 
 typedef struct bin_objfmt_output_info {
     yasm_object *object;
+    yasm_errwarns *errwarns;
     /*@dependent@*/ FILE *f;
     /*@only@*/ unsigned char *buf;
     /*@observer@*/ const yasm_section *sect;
@@ -252,6 +253,29 @@ bin_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d)
     return 0;
 }
 
+static int
+bin_objfmt_check_sym(yasm_symrec *sym, /*@null@*/ void *d)
+{
+    /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d;
+    yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
+    assert(info != NULL);
+
+    if (vis & YASM_SYM_EXTERN) {
+       yasm_warn_set(YASM_WARN_GENERAL,
+           N_("binary object format does not support extern variables"));
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
+    } else if (vis & YASM_SYM_GLOBAL) {
+       yasm_warn_set(YASM_WARN_GENERAL,
+           N_("binary object format does not support global variables"));
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
+    } else if (vis & YASM_SYM_COMMON) {
+       yasm_error_set(YASM_ERROR_TYPE,
+           N_("binary object format does not support common variables"));
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
+    }
+    return 0;
+}
+
 static void
 bin_objfmt_output(yasm_object *object, FILE *f, /*@unused@*/ int all_syms,
                  yasm_errwarns *errwarns)
@@ -266,9 +290,13 @@ bin_objfmt_output(yasm_object *object, FILE *f, /*@unused@*/ int all_syms,
     bin_objfmt_output_info info;
 
     info.object = object;
+    info.errwarns = errwarns;
     info.f = f;
     info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE);
 
+    /* Check symbol table */
+    yasm_symtab_traverse(object->symtab, &info, bin_objfmt_check_sym);
+
     text = yasm_object_find_general(object, ".text");
     data = yasm_object_find_general(object, ".data");
     bss = yasm_object_find_general(object, ".bss");
@@ -467,96 +495,45 @@ bin_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams,
        return NULL;
 }
 
-static yasm_symrec *
-bin_objfmt_extern_declare(yasm_object *object, const char *name,
-                         /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-
-    yasm_warn_set(YASM_WARN_GENERAL,
-                 N_("binary object format does not support extern variables"));
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-    return sym;
-}
-
-static yasm_symrec *
-bin_objfmt_global_declare(yasm_object *object, const char *name,
-                         /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-
-    yasm_warn_set(YASM_WARN_GENERAL,
-                 N_("binary object format does not support global variables"));
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-    return sym;
-}
-
-static yasm_symrec *
-bin_objfmt_common_declare(yasm_object *object, const char *name,
-                         /*@only@*/ yasm_expr *size, /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-
-    yasm_expr_destroy(size);
-    yasm_error_set(YASM_ERROR_TYPE,
-       N_("binary object format does not support common variables"));
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-    return sym;
-}
-
-static int
-bin_objfmt_directive(yasm_object *object, const char *name,
-                    /*@null@*/ yasm_valparamhead *valparams,
-                    /*@unused@*/ /*@null@*/
-                    yasm_valparamhead *objext_valparams, unsigned long line)
+static void
+bin_objfmt_dir_org(yasm_object *object,
+                  /*@null@*/ yasm_valparamhead *valparams,
+                  /*@unused@*/ /*@null@*/
+                  yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_section *sect;
     yasm_valparam *vp;
 
-    if (yasm__strcasecmp(name, "org") == 0) {
-       /*@null@*/ yasm_expr *start = NULL;
-
-       if (!valparams) {
-           yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
-                          "ORG");
-           return 0;
-       }
+    /*@null@*/ yasm_expr *start = NULL;
 
-       /* ORG takes just a simple integer as param */
-       vp = yasm_vps_first(valparams);
-       if (vp->val)
-           start = yasm_expr_create_ident(yasm_expr_sym(yasm_symtab_use(
-               object->symtab, vp->val, line)), line);
-       else if (vp->param) {
-           start = vp->param;
-           vp->param = NULL;   /* Don't let valparams delete it */
-       }
+    if (!valparams) {
+       yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
+                      "ORG");
+       return;
+    }
 
-       if (!start) {
-           yasm_error_set(YASM_ERROR_SYNTAX,
-                          N_("argument to ORG must be expression"));
-           return 0;
-       }
+    /* ORG takes just a simple integer as param */
+    vp = yasm_vps_first(valparams);
+    if (vp->val)
+       start = yasm_expr_create_ident(yasm_expr_sym(yasm_symtab_use(
+           object->symtab, vp->val, line)), line);
+    else if (vp->param) {
+       start = vp->param;
+       vp->param = NULL;       /* Don't let valparams delete it */
+    }
 
-       /* ORG changes the start of the .text section */
-       sect = yasm_object_find_general(object, ".text");
-       if (!sect)
-           yasm_internal_error(
-               N_("bin objfmt: .text section does not exist before ORG is called?"));
-       yasm_section_set_start(sect, start, line);
+    if (!start) {
+       yasm_error_set(YASM_ERROR_SYNTAX,
+                      N_("argument to ORG must be expression"));
+       return;
+    }
 
-       return 0;           /* directive recognized */
-    } else
-       return 1;           /* directive unrecognized */
+    /* ORG changes the start of the .text section */
+    sect = yasm_object_find_general(object, ".text");
+    if (!sect)
+       yasm_internal_error(
+           N_("bin objfmt: .text section does not exist before ORG is called?"));
+    yasm_section_set_start(sect, start, line);
 }
 
 
@@ -566,6 +543,11 @@ static const char *bin_objfmt_dbgfmt_keywords[] = {
     NULL
 };
 
+static const yasm_directive bin_objfmt_directives[] = {
+    { "org",   "nasm", bin_objfmt_dir_org,     YASM_DIR_ARG_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define objfmt structure -- see objfmt.h for details */
 yasm_objfmt_module yasm_bin_LTX_objfmt = {
     "Flat format binary",
@@ -574,13 +556,10 @@ yasm_objfmt_module yasm_bin_LTX_objfmt = {
     16,
     bin_objfmt_dbgfmt_keywords,
     "null",
+    bin_objfmt_directives,
     bin_objfmt_create,
     bin_objfmt_output,
     bin_objfmt_destroy,
     bin_objfmt_add_default_section,
-    bin_objfmt_section_switch,
-    bin_objfmt_extern_declare,
-    bin_objfmt_global_declare,
-    bin_objfmt_common_declare,
-    bin_objfmt_directive
+    bin_objfmt_section_switch
 };
index feb790af815c45470d03ed16b36e7f4dfd167b64..c93e8eaf3a3d1c93fe3e9bda615772db6cae59ef 100644 (file)
@@ -168,8 +168,6 @@ typedef struct coff_symrec_data {
     unsigned long index;               /* assigned COFF symbol table index */
     coff_symrec_sclass sclass;         /* storage class */
 
-    /*@owned@*/ /*@null@*/ yasm_expr *size; /* size if COMMON declaration */
-
     int numaux;                        /* number of auxiliary entries */
     coff_symtab_auxtype auxtype;    /* type of aux entries */
     coff_symtab_auxent aux[1]; /* actually may be any size (including 0) */
@@ -230,8 +228,7 @@ yasm_objfmt_module yasm_win64_LTX_objfmt;
 
 static /*@dependent@*/ coff_symrec_data *
 coff_objfmt_sym_set_data(yasm_symrec *sym, coff_symrec_sclass sclass,
-                        /*@only@*/ /*@null@*/ yasm_expr *size, int numaux,
-                        coff_symtab_auxtype auxtype)
+                        int numaux, coff_symtab_auxtype auxtype)
 {
     coff_symrec_data *sym_data;
 
@@ -239,7 +236,6 @@ coff_objfmt_sym_set_data(yasm_symrec *sym, coff_symrec_sclass sclass,
                            (numaux-1)*sizeof(coff_symtab_auxent));
     sym_data->index = 0;
     sym_data->sclass = sclass;
-    sym_data->size = size;
     sym_data->numaux = numaux;
     sym_data->auxtype = auxtype;
 
@@ -266,7 +262,7 @@ coff_common_create(yasm_object *object)
     filesym = yasm_symtab_define_special(object->symtab, ".file",
                                         YASM_SYM_GLOBAL);
     objfmt_coff->filesym_data =
-       coff_objfmt_sym_set_data(filesym, COFF_SCL_FILE, NULL, 1,
+       coff_objfmt_sym_set_data(filesym, COFF_SCL_FILE, 1,
                                 COFF_SYMTAB_AUX_FILE);
     /* Filename is set in coff_objfmt_output */
     objfmt_coff->filesym_data->aux[0].fname = NULL;
@@ -376,8 +372,7 @@ coff_objfmt_init_new_section(yasm_object *object, yasm_section *sect,
     sym = yasm_symtab_define_label(object->symtab, sectname,
                                   yasm_section_bcs_first(sect), 1, line);
     yasm_symrec_declare(sym, YASM_SYM_GLOBAL, line);
-    coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, NULL, 1,
-                            COFF_SYMTAB_AUX_SECT);
+    coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 1, COFF_SYMTAB_AUX_SECT);
     data->sym = sym;
     return data;
 }
@@ -506,11 +501,14 @@ coff_objfmt_output_value(yasm_value *value, unsigned char *buf,
            /* In standard COFF, COMMON symbols have their length added in */
            if (!objfmt_coff->win32) {
                /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd;
+               /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr;
                /*@dependent@*/ /*@null@*/ yasm_intnum *common_size;
 
                csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
                assert(csymd != NULL);
-               common_size = yasm_expr_get_intnum(&csymd->size, 1);
+               csize_expr = yasm_symrec_get_common_size(sym);
+               assert(csize_expr != NULL);
+               common_size = yasm_expr_get_intnum(csize_expr, 1);
                if (!common_size) {
                    yasm_error_set(YASM_ERROR_TOO_COMPLEX,
                                   N_("coff: common size too complex"));
@@ -942,13 +940,20 @@ static int
 coff_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d)
 {
     /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
+    yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
+    coff_symrec_data *sym_data;
+
     assert(info != NULL);
-    if (info->all_syms || yasm_symrec_get_visibility(sym) != YASM_SYM_LOCAL) {
+
+    sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
+    if ((vis & (YASM_SYM_EXTERN|YASM_SYM_GLOBAL|YASM_SYM_COMMON)) && !sym_data)
+       sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_EXT, 0,
+                            COFF_SYMTAB_AUX_NONE);
+
+    if (info->all_syms || vis != YASM_SYM_LOCAL) {
        /* Save index in symrec data */
-       coff_symrec_data *sym_data =
-           yasm_symrec_get_data(sym, &coff_symrec_data_cb);
        if (!sym_data) {
-           sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, NULL, 0,
+           sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 0,
                                                COFF_SYMTAB_AUX_NONE);
        }
        sym_data->index = info->indx;
@@ -1042,11 +1047,15 @@ coff_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
            scnum = 0xffff;     /* -1 = absolute symbol */
        } else {
            if (vis & YASM_SYM_COMMON) {
-               intn = yasm_expr_get_intnum(&csymd->size, 1);
+               /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr;
+               csize_expr = yasm_symrec_get_common_size(sym);
+               assert(csize_expr != NULL);
+               intn = yasm_expr_get_intnum(csize_expr, 1);
                if (!intn) {
                    yasm_error_set(YASM_ERROR_NOT_CONSTANT,
                        N_("COMMON data size not an integer expression"));
-                   yasm_errwarn_propagate(info->errwarns, csymd->size->line);
+                   yasm_errwarn_propagate(info->errwarns,
+                                          (*csize_expr)->line);
                } else
                    value = yasm_intnum_get_uint(intn);
                scnum = 0;
@@ -1630,55 +1639,9 @@ coff_section_data_print(void *data, FILE *f, int indent_level)
     fprintf(f, "%*srelocs:\n", indent_level, "");
 }
 
-static yasm_symrec *
-coff_objfmt_extern_declare(yasm_object *object, const char *name, /*@unused@*/
-                          /*@null@*/ yasm_valparamhead *objext_valparams,
-                          unsigned long line)
-{
-    yasm_symrec *sym;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-    coff_objfmt_sym_set_data(sym, COFF_SCL_EXT, NULL, 0,
-                            COFF_SYMTAB_AUX_NONE);
-
-    return sym;
-}
-
-static yasm_symrec *
-coff_objfmt_global_declare(yasm_object *object, const char *name, /*@unused@*/
-                          /*@null@*/ yasm_valparamhead *objext_valparams,
-                          unsigned long line)
-{
-    yasm_symrec *sym;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-    coff_objfmt_sym_set_data(sym, COFF_SCL_EXT, NULL, 0,
-                            COFF_SYMTAB_AUX_NONE);
-
-    return sym;
-}
-
-static yasm_symrec *
-coff_objfmt_common_declare(yasm_object *object, const char *name,
-                          /*@only@*/ yasm_expr *size, /*@unused@*/ /*@null@*/
-                          yasm_valparamhead *objext_valparams,
-                          unsigned long line)
-{
-    yasm_symrec *sym;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-    coff_objfmt_sym_set_data(sym, COFF_SCL_EXT, size, 0,
-                            COFF_SYMTAB_AUX_NONE);
-
-    return sym;
-}
-
 static void
 coff_symrec_data_destroy(void *data)
 {
-    coff_symrec_data *csymd = (coff_symrec_data *)data;
-    if (csymd->size)
-       yasm_expr_destroy(csymd->size);
     yasm_xfree(data);
 }
 
@@ -1689,17 +1652,11 @@ coff_symrec_data_print(void *data, FILE *f, int indent_level)
 
     fprintf(f, "%*ssymtab index=%lu\n", indent_level, "", csd->index);
     fprintf(f, "%*ssclass=%d\n", indent_level, "", csd->sclass);
-    fprintf(f, "%*ssize=", indent_level, "");
-    if (csd->size)
-       yasm_expr_print(csd->size, f);
-    else
-       fprintf(f, "nil");
-    fprintf(f, "\n");
 }
 
 static void
 dir_export(yasm_object *object, yasm_valparamhead *valparams,
-          unsigned long line)
+          yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_valparam *vp;
     int isnew;
@@ -1740,7 +1697,7 @@ dir_export(yasm_object *object, yasm_valparamhead *valparams,
 
 static void
 dir_ident(yasm_object *object, yasm_valparamhead *valparams,
-         unsigned long line)
+         yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparamhead sect_vps;
@@ -1749,7 +1706,13 @@ dir_ident(yasm_object *object, yasm_valparamhead *valparams,
     const char *sectname;
     yasm_valparam *vp, *vp2;
 
+    /* Accept, but do nothing with empty ident */
+    if (!valparams)
+       return;
+
     vp = yasm_vps_first(valparams);
+    if (!vp)
+       return;
 
     if (objfmt_coff->win32) {
        /* Put ident data into .comment section for COFF, or .rdata$zzz
@@ -1788,59 +1751,9 @@ dir_ident(yasm_object *object, yasm_valparamhead *valparams,
        yasm_bc_create_data(&dvs, 1, 1, object->arch, line));
 }
 
-static int
-coff_objfmt_directive(yasm_object *object, const char *name,
-                     /*@null@*/ yasm_valparamhead *valparams,
-                     /*@unused@*/ /*@null@*/
-                     yasm_valparamhead *objext_valparams,
-                     unsigned long line)
-{
-    if (yasm__strcasecmp(name, "IDENT") == 0) {
-       if (!valparams) {
-           yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
-                          "IDENT");
-           return 0;
-       }
-       dir_ident(object, valparams, line);
-       return 0;
-    }
-    return 1;
-}
-
-static int
-win32_objfmt_directive(yasm_object *object, const char *name,
-                      /*@null@*/ yasm_valparamhead *valparams,
-                      /*@unused@*/ /*@null@*/
-                      yasm_valparamhead *objext_valparams,
-                      unsigned long line)
-{
-    static const struct {
-       const char *name;
-       int required_arg;
-       void (*func) (yasm_object *, yasm_valparamhead *, unsigned long);
-    } dirs[] = {
-       {"EXPORT", 1, dir_export},
-       {"IDENT", 1, dir_ident}
-    };
-    size_t i;
-
-    for (i=0; i<NELEMS(dirs); i++) {
-       if (yasm__strcasecmp(name, dirs[i].name) == 0) {
-           if (dirs[i].required_arg && !valparams) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("[%s] requires an argument"), dirs[i].name);
-               return 0;
-           }
-           dirs[i].func(object, valparams, line);
-           return 0;
-       }
-    }
-    return 1;
-}
-
 static void
 dir_proc_frame(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
-              unsigned long line)
+              yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparam *vp = yasm_vps_first(valparams);
@@ -1902,7 +1815,7 @@ get_curpos(yasm_object *object, unsigned long line)
 
 static void
 dir_pushreg(yasm_object *object, yasm_valparamhead *valparams,
-           unsigned long line)
+           yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparam *vp = yasm_vps_first(valparams);
@@ -1931,7 +1844,7 @@ dir_pushreg(yasm_object *object, yasm_valparamhead *valparams,
 
 static void
 dir_setframe(yasm_object *object, yasm_valparamhead *valparams,
-            unsigned long line)
+            yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparam *vp = yasm_vps_first(valparams);
@@ -1971,7 +1884,7 @@ dir_setframe(yasm_object *object, yasm_valparamhead *valparams,
 
 static void
 dir_allocstack(yasm_object *object, yasm_valparamhead *valparams,
-              unsigned long line)
+              yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparam *vp = yasm_vps_first(valparams);
@@ -2054,21 +1967,21 @@ dir_save_common(yasm_object *object, yasm_valparamhead *valparams,
 
 static void
 dir_savereg(yasm_object *object, yasm_valparamhead *valparams,
-           unsigned long line)
+           yasm_valparamhead *objext_valparams, unsigned long line)
 {
     dir_save_common(object, valparams, line, "SAVEREG", UWOP_SAVE_NONVOL);
 }
 
 static void
 dir_savexmm128(yasm_object *object, yasm_valparamhead *valparams,
-              unsigned long line)
+              yasm_valparamhead *objext_valparams, unsigned long line)
 {
     dir_save_common(object, valparams, line, "SAVEXMM128", UWOP_SAVE_XMM128);
 }
 
 static void
 dir_pushframe(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
-             unsigned long line)
+             yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_valparam *vp = yasm_vps_first(valparams);
@@ -2091,7 +2004,7 @@ dir_pushframe(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
 
 static void
 dir_endprolog(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
-             unsigned long line)
+             yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     if (!procframe_checkstate(objfmt_coff, "ENDPROLOG"))
@@ -2103,7 +2016,7 @@ dir_endprolog(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
 
 static void
 dir_endproc_frame(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
-                 unsigned long line)
+                 yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
     yasm_section *sect;
@@ -2191,47 +2104,6 @@ dir_endproc_frame(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams,
     objfmt_coff->done_prolog = 0;
 }
 
-static int
-win64_objfmt_directive(yasm_object *object, const char *name,
-                      /*@null@*/ yasm_valparamhead *valparams,
-                      /*@unused@*/ /*@null@*/
-                      yasm_valparamhead *objext_valparams,
-                      unsigned long line)
-{
-    static const struct {
-       const char *name;
-       int required_arg;
-       void (*func) (yasm_object *, yasm_valparamhead *, unsigned long);
-    } dirs[] = {
-       {"EXPORT", 1, dir_export},
-       {"IDENT", 1, dir_ident},
-       {"PROC_FRAME", 0, dir_proc_frame},
-       {"PUSHREG", 1, dir_pushreg},
-       {"SETFRAME", 1, dir_setframe},
-       {"ALLOCSTACK", 1, dir_allocstack},
-       {"SAVEREG", 1, dir_savereg},
-       {"SAVEXMM128", 1, dir_savexmm128},
-       {"PUSHFRAME", 0, dir_pushframe},
-       {"ENDPROLOG", 0, dir_endprolog},
-       {"ENDPROC_FRAME", 0, dir_endproc_frame}
-    };
-    size_t i;
-
-    for (i=0; i<NELEMS(dirs); i++) {
-       if (yasm__strcasecmp(name, dirs[i].name) == 0) {
-           if (dirs[i].required_arg && !valparams) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("[%s] requires an argument"), dirs[i].name);
-               return 0;
-           }
-           dirs[i].func(object, valparams, line);
-           return 0;
-       }
-    }
-    return 1;
-}
-
-
 /* Define valid debug formats to use with this object format */
 static const char *coff_objfmt_dbgfmt_keywords[] = {
     "null",
@@ -2239,6 +2111,12 @@ static const char *coff_objfmt_dbgfmt_keywords[] = {
     NULL
 };
 
+static const yasm_directive coff_objfmt_directives[] = {
+    { ".ident",                "gas",  dir_ident,      YASM_DIR_ANY },
+    { "ident",         "nasm", dir_ident,      YASM_DIR_ANY },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define objfmt structure -- see objfmt.h for details */
 yasm_objfmt_module yasm_coff_LTX_objfmt = {
     "COFF (DJGPP)",
@@ -2247,15 +2125,12 @@ yasm_objfmt_module yasm_coff_LTX_objfmt = {
     32,
     coff_objfmt_dbgfmt_keywords,
     "null",
+    coff_objfmt_directives,
     coff_objfmt_create,
     coff_objfmt_output,
     coff_objfmt_destroy,
     coff_objfmt_add_default_section,
-    coff_objfmt_section_switch,
-    coff_objfmt_extern_declare,
-    coff_objfmt_global_declare,
-    coff_objfmt_common_declare,
-    coff_objfmt_directive
+    coff_objfmt_section_switch
 };
 
 /* Define valid debug formats to use with this object format */
@@ -2266,6 +2141,14 @@ static const char *winXX_objfmt_dbgfmt_keywords[] = {
     NULL
 };
 
+static const yasm_directive win32_objfmt_directives[] = {
+    { ".ident",                "gas",  dir_ident,      YASM_DIR_ANY },
+    { ".export",       "gas",  dir_export,     YASM_DIR_ID_REQUIRED },
+    { "ident",         "nasm", dir_ident,      YASM_DIR_ANY },
+    { "export",                "nasm", dir_export,     YASM_DIR_ID_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define objfmt structure -- see objfmt.h for details */
 yasm_objfmt_module yasm_win32_LTX_objfmt = {
     "Win32",
@@ -2274,15 +2157,29 @@ yasm_objfmt_module yasm_win32_LTX_objfmt = {
     32,
     winXX_objfmt_dbgfmt_keywords,
     "null",
+    win32_objfmt_directives,
     win32_objfmt_create,
     coff_objfmt_output,
     coff_objfmt_destroy,
     coff_objfmt_add_default_section,
-    coff_objfmt_section_switch,
-    coff_objfmt_extern_declare,
-    coff_objfmt_global_declare,
-    coff_objfmt_common_declare,
-    win32_objfmt_directive
+    coff_objfmt_section_switch
+};
+
+static const yasm_directive win64_objfmt_directives[] = {
+    { ".ident",                "gas",  dir_ident,      YASM_DIR_ANY },
+    { "ident",         "nasm", dir_ident,      YASM_DIR_ANY },
+    { ".export",       "gas",  dir_export,     YASM_DIR_ID_REQUIRED },
+    { "export",                "nasm", dir_export,     YASM_DIR_ID_REQUIRED },
+    { "proc_frame",    "nasm", dir_proc_frame, YASM_DIR_ANY },
+    { "pushreg",       "nasm", dir_pushreg,    YASM_DIR_ARG_REQUIRED },
+    { "setframe",      "nasm", dir_setframe,   YASM_DIR_ARG_REQUIRED },
+    { "allocstack",    "nasm", dir_allocstack, YASM_DIR_ARG_REQUIRED },
+    { "savereg",       "nasm", dir_savereg,    YASM_DIR_ARG_REQUIRED },
+    { "savexmm128",    "nasm", dir_savexmm128, YASM_DIR_ARG_REQUIRED },
+    { "pushframe",     "nasm", dir_pushframe,  YASM_DIR_ANY },
+    { "endprolog",     "nasm", dir_endprolog,  YASM_DIR_ANY },
+    { "endproc_frame", "nasm", dir_endproc_frame, YASM_DIR_ANY },
+    { NULL, NULL, NULL, 0 }
 };
 
 /* Define objfmt structure -- see objfmt.h for details */
@@ -2293,15 +2190,12 @@ yasm_objfmt_module yasm_win64_LTX_objfmt = {
     64,
     winXX_objfmt_dbgfmt_keywords,
     "null",
+    win64_objfmt_directives,
     win64_objfmt_create,
     coff_objfmt_output,
     coff_objfmt_destroy,
     coff_objfmt_add_default_section,
-    coff_objfmt_section_switch,
-    coff_objfmt_extern_declare,
-    coff_objfmt_global_declare,
-    coff_objfmt_common_declare,
-    win64_objfmt_directive
+    coff_objfmt_section_switch
 };
 yasm_objfmt_module yasm_x64_LTX_objfmt = {
     "Win64",
@@ -2310,13 +2204,10 @@ yasm_objfmt_module yasm_x64_LTX_objfmt = {
     64,
     winXX_objfmt_dbgfmt_keywords,
     "null",
+    win64_objfmt_directives,
     win64_objfmt_create,
     coff_objfmt_output,
     coff_objfmt_destroy,
     coff_objfmt_add_default_section,
-    coff_objfmt_section_switch,
-    coff_objfmt_extern_declare,
-    coff_objfmt_global_declare,
-    coff_objfmt_common_declare,
-    win64_objfmt_directive
+    coff_objfmt_section_switch
 };
index 6b595aa5f712147776205216db61c11ecb69dd51..f50c271dc0c0e118b1cac4d083383b31566ddb09 100644 (file)
@@ -152,7 +152,7 @@ yasm_win64__unwind_generate(yasm_section *xdata, coff_unwind_info *info,
     /* Code array */
     SLIST_FOREACH(code, &info->codes, link) {
        codebc = yasm_bc_create_common(&win64_uwcode_bc_callback, code,
-                                      yasm_symrec_get_line(code->loc));
+                                      yasm_symrec_get_def_line(code->loc));
        yasm_section_bcs_append(xdata, codebc);
     }
 
@@ -259,7 +259,7 @@ win64_uwinfo_bc_expand(yasm_bytecode *bc, int span, long old_val, long new_val,
     coff_unwind_info *info = (coff_unwind_info *)bc->contents;
     switch (span) {
        case 1:
-           yasm_error_set_xref(yasm_symrec_get_line(info->prolog),
+           yasm_error_set_xref(yasm_symrec_get_def_line(info->prolog),
                                N_("prologue ended here"));
            yasm_error_set(YASM_ERROR_VALUE,
                           N_("prologue %ld bytes, must be <256"), new_val);
index e65c251040bf7d0bebd4cd17291f1326f1360e9e..5017cb8533dc104f183e6cfabe8ab98f1ce470c3 100644 (file)
@@ -144,79 +144,6 @@ dbg_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams,
     }
 }
 
-static yasm_symrec *
-dbg_objfmt_extern_declare(yasm_object *object, const char *name,
-                         /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt;
-    yasm_symrec *sym;
-
-    fprintf(objfmt_dbg->dbgfile, "extern_declare(\"%s\", ", name);
-    yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", %lu), returning sym\n", line);
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-    return sym;
-}
-
-static yasm_symrec *
-dbg_objfmt_global_declare(yasm_object *object, const char *name,
-                         /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt;
-    yasm_symrec *sym;
-
-    fprintf(objfmt_dbg->dbgfile, "global_declare(\"%s\", ", name);
-    yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", %lu), returning sym\n", line);
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-    return sym;
-}
-
-static yasm_symrec *
-dbg_objfmt_common_declare(yasm_object *object, const char *name,
-                         /*@only@*/ yasm_expr *size,
-                         /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt;
-    yasm_symrec *sym;
-
-    assert(objfmt_dbg->dbgfile != NULL);
-    fprintf(objfmt_dbg->dbgfile, "common_declare(\"%s\", ", name);
-    yasm_expr_print(size, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", ");
-    yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", %lu), returning sym\n", line);
-    yasm_expr_destroy(size);
-
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-    return sym;
-}
-
-static int
-dbg_objfmt_directive(yasm_object *object, const char *name,
-                    /*@null@*/ yasm_valparamhead *valparams,
-                    /*@null@*/ yasm_valparamhead *objext_valparams,
-                    unsigned long line)
-{
-    yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt;
-    fprintf(objfmt_dbg->dbgfile, "directive(\"%s\", ", name);
-    yasm_vps_print(valparams, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", ");
-    yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile);
-    fprintf(objfmt_dbg->dbgfile, ", %lu), returning 0 (recognized)\n", line);
-    return 0;      /* dbg format "recognizes" all directives */
-}
-
-
 /* Define valid debug formats to use with this object format */
 static const char *dbg_objfmt_dbgfmt_keywords[] = {
     "null",
@@ -231,13 +158,10 @@ yasm_objfmt_module yasm_dbg_LTX_objfmt = {
     32,
     dbg_objfmt_dbgfmt_keywords,
     "null",
+    NULL,      /* no directives */
     dbg_objfmt_create,
     dbg_objfmt_output,
     dbg_objfmt_destroy,
     dbg_objfmt_add_default_section,
-    dbg_objfmt_section_switch,
-    dbg_objfmt_extern_declare,
-    dbg_objfmt_global_declare,
-    dbg_objfmt_common_declare,
-    dbg_objfmt_directive
+    dbg_objfmt_section_switch
 };
index 19dc599619534e1193528152253430aaa16fa716..70b0f83505331633061707eb03cea0642841abaa 100644 (file)
@@ -75,8 +75,9 @@ typedef struct {
 
 typedef struct {
     yasm_objfmt_elf *objfmt_elf;
+    yasm_errwarns *errwarns;
     int local_names;
-} append_local_sym_info;
+} build_symtab_info;
 
 yasm_objfmt_module yasm_elf_LTX_objfmt;
 yasm_objfmt_module yasm_elf32_LTX_objfmt;
@@ -89,38 +90,170 @@ elf_objfmt_symtab_append(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym,
                         elf_symbol_type type, elf_symbol_vis vis,
                          yasm_expr *size, elf_address *value)
 {
-    /* Only append to table if not already appended */
     elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data);
-    if (!entry || !elf_sym_in_table(entry)) {
-       if (!entry) {
-           elf_strtab_entry *name =
-               elf_strtab_append_str(objfmt_elf->strtab,
-                                     yasm_symrec_get_name(sym));
-           entry = elf_symtab_entry_create(name, sym);
-       }
-       elf_symtab_append_entry(objfmt_elf->elf_symtab, entry);
+
+    if (!entry) {
+       elf_strtab_entry *name =
+           elf_strtab_append_str(objfmt_elf->strtab,
+                                 yasm_symrec_get_name(sym));
+       entry = elf_symtab_entry_create(name, sym);
        yasm_symrec_add_data(sym, &elf_symrec_data, entry);
     }
 
+    /* Only append to table if not already appended */
+    if (!elf_sym_in_table(entry))
+       elf_symtab_append_entry(objfmt_elf->elf_symtab, entry);
+
     elf_symtab_set_nonzero(entry, NULL, sectidx, bind, type, size, value);
     elf_sym_set_visibility(entry, vis);
 
     return entry;
 }
 
+static elf_symtab_entry *
+build_extern(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym)
+{
+    yasm_valparamhead *objext_valparams =
+       yasm_symrec_get_objext_valparams(sym);
+
+    if (objext_valparams) {
+       yasm_valparam *vp = yasm_vps_first(objext_valparams);
+       for (; vp; vp = yasm_vps_next(vp)) {
+           if (vp->val)
+               yasm_error_set(YASM_ERROR_TYPE,
+                              N_("unrecognized symbol type `%s'"), vp->val);
+       }
+    }
+
+    return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL, 0,
+                                   STV_DEFAULT, NULL, NULL);
+}
+
+static elf_symtab_entry *
+build_global(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym)
+{
+    yasm_valparamhead *objext_valparams =
+       yasm_symrec_get_objext_valparams(sym);
+    elf_symbol_type type = 0;
+    yasm_expr *size = NULL;
+    elf_symbol_vis vis = STV_DEFAULT;
+    unsigned int vis_overrides = 0;
+
+    if (objext_valparams) {
+       yasm_valparam *vp = yasm_vps_first(objext_valparams);
+       for (; vp; vp = yasm_vps_next(vp))
+        {
+            if (vp->val) {
+                if (yasm__strcasecmp(vp->val, "function") == 0)
+                    type = STT_FUNC;
+                else if (yasm__strcasecmp(vp->val, "data") == 0 ||
+                         yasm__strcasecmp(vp->val, "object") == 0)
+                    type = STT_OBJECT;
+                else if (yasm__strcasecmp(vp->val, "internal") == 0) {
+                    vis = STV_INTERNAL;
+                    vis_overrides++;
+                }
+                else if (yasm__strcasecmp(vp->val, "hidden") == 0) {
+                    vis = STV_HIDDEN;
+                    vis_overrides++;
+                }
+                else if (yasm__strcasecmp(vp->val, "protected") == 0) {
+                    vis = STV_PROTECTED;
+                    vis_overrides++;
+                }
+                else
+                    yasm_error_set(YASM_ERROR_TYPE,
+                                  N_("unrecognized symbol type `%s'"),
+                                  vp->val);
+            }
+            else if (vp->param && !size) {
+                size = vp->param;
+                vp->param = NULL;      /* to avoid double-free of expr */
+            }
+       }
+        if (vis_overrides > 1) {
+            yasm_warn_set(YASM_WARN_GENERAL,
+                N_("More than one symbol visibility provided; using last"));
+        }
+    }
+
+    return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL,
+                                   type, vis, size, NULL);
+}
+
+static /*@null@*/ elf_symtab_entry *
+build_common(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym)
+{
+    yasm_expr **size = yasm_symrec_get_common_size(sym);
+    yasm_valparamhead *objext_valparams =
+       yasm_symrec_get_objext_valparams(sym);
+    unsigned long addralign = 0;
+
+    if (objext_valparams) {
+       yasm_valparam *vp = yasm_vps_first(objext_valparams);
+        for (; vp; vp = yasm_vps_next(vp)) {
+            if (!vp->val && vp->param) {
+                /*@dependent@*/ /*@null@*/ const yasm_intnum *align_expr;
+
+                align_expr = yasm_expr_get_intnum(&vp->param, 0);
+                if (!align_expr) {
+                    yasm_error_set(YASM_ERROR_VALUE,
+                       N_("alignment constraint is not an integer"));
+                    return NULL;
+                }
+                addralign = yasm_intnum_get_uint(align_expr);
+
+                /* Alignments must be a power of two. */
+                if (!is_exp2(addralign)) {
+                    yasm_error_set(YASM_ERROR_VALUE,
+                        N_("alignment constraint is not a power of two"));
+                    return NULL;
+                }
+            } else if (vp->val)
+                yasm_warn_set(YASM_WARN_GENERAL,
+                              N_("Unrecognized qualifier `%s'"), vp->val);
+        }
+    }
+
+    return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_COMMON, STB_GLOBAL,
+                                   0, STV_DEFAULT, *size, &addralign);
+}
+
 static int
-elf_objfmt_append_local_sym(yasm_symrec *sym, /*@null@*/ void *d)
+elf_objfmt_build_symtab(yasm_symrec *sym, /*@null@*/ void *d)
 {
-    append_local_sym_info *info = (append_local_sym_info *)d;
-    elf_symtab_entry *entry;
+    build_symtab_info *info = (build_symtab_info *)d;
+    yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
+    yasm_sym_status status = yasm_symrec_get_status(sym);
+    elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data);
     elf_address value=0;
     yasm_section *sect=NULL;
     yasm_bytecode *precbc=NULL;
 
     assert(info != NULL);
 
+    if (vis & YASM_SYM_EXTERN) {
+       entry = build_extern(info->objfmt_elf, sym);
+       yasm_errwarn_propagate(info->errwarns,
+                              yasm_symrec_get_decl_line(sym));
+       return 0;
+    }
+
+    if (vis & YASM_SYM_COMMON) {
+       entry = build_common(info->objfmt_elf, sym);
+       yasm_errwarn_propagate(info->errwarns,
+                              yasm_symrec_get_decl_line(sym));
+       /* If the COMMON variable was actually defined, fall through. */
+       if (!(status & YASM_SYM_DEFINED))
+           return 0;
+    }
+
+    /* Ignore any undefined at this point. */
+    if (!(status & YASM_SYM_DEFINED))
+       return 0;
+
     if (!yasm_symrec_get_label(sym, &precbc)) {
-       if (!yasm_symrec_is_abs(sym))   /* let absolute symbol into output */
+       if (!yasm_symrec_get_equ(sym) && !yasm_symrec_is_abs(sym))
            return 0;
        precbc = NULL;
     }
@@ -128,25 +261,44 @@ elf_objfmt_append_local_sym(yasm_symrec *sym, /*@null@*/ void *d)
     if (precbc)
        sect = yasm_bc_get_section(precbc);
 
-    entry = yasm_symrec_get_data(sym, &elf_symrec_data);
-    if (!entry || !elf_sym_in_table(entry)) {
+    if (entry && elf_sym_in_table(entry))
+       ;
+    else if (vis & YASM_SYM_GLOBAL) {
+       entry = build_global(info->objfmt_elf, sym);
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
+    } else {
        int is_sect = 0;
+
+       /* Locals (except when debugging) do not need to be
+        * in the symbol table, unless they're a section.
+        */
        if (sect && !yasm_section_is_absolute(sect) &&
            strcmp(yasm_symrec_get_name(sym), yasm_section_get_name(sect))==0)
            is_sect = 1;
-
-       /* neither sections nor locals (except when debugging) need names */
+#if 0
+       /* FIXME: to enable this we must have handling in place for special
+        * symbols.
+        */
+       if (!info->local_names && !is_sect)
+           return 0;
+#else
+       if (yasm_symrec_get_equ(sym) && !yasm_symrec_is_abs(sym))
+           return 0;
+#endif
+       entry = yasm_symrec_get_data(sym, &elf_symrec_data);
        if (!entry) {
-           elf_strtab_entry *name = info->local_names && !is_sect
-               ? elf_strtab_append_str(info->objfmt_elf->strtab,
-                                       yasm_symrec_get_name(sym))
-               : NULL;
+           elf_strtab_entry *name = !info->local_names || is_sect ? NULL :
+               elf_strtab_append_str(info->objfmt_elf->strtab,
+                                     yasm_symrec_get_name(sym));
            entry = elf_symtab_entry_create(name, sym);
+           yasm_symrec_add_data(sym, &elf_symrec_data, entry);
        }
-       elf_symtab_insert_local_sym(info->objfmt_elf->elf_symtab, entry);
+
+       if (!elf_sym_in_table(entry))
+           elf_symtab_insert_local_sym(info->objfmt_elf->elf_symtab, entry);
+
        elf_symtab_set_nonzero(entry, sect, 0, STB_LOCAL,
                               is_sect ? STT_SECTION : 0, NULL, 0);
-       yasm_symrec_add_data(sym, &elf_symrec_data, entry);
 
        if (is_sect)
            return 0;
@@ -588,7 +740,7 @@ elf_objfmt_output(yasm_object *object, FILE *f, int all_syms,
 {
     yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
     elf_objfmt_output_info info;
-    append_local_sym_info localsym_info;
+    build_symtab_info buildsym_info;
     long pos;
     unsigned long elf_shead_addr;
     elf_secthead *esdn;
@@ -614,16 +766,17 @@ elf_objfmt_output(yasm_object *object, FILE *f, int all_syms,
     }
 
     /* Create missing section headers */
-    localsym_info.objfmt_elf = objfmt_elf;
     if (yasm_object_sections_traverse(object, &info,
                                      elf_objfmt_create_dbg_secthead))
        return;
 
     /* add all (local) syms to symtab because relocation needs a symtab index
      * if all_syms, register them by name.  if not, use strtab entry 0 */
-    localsym_info.local_names = all_syms;
-    yasm_symtab_traverse(object->symtab, &localsym_info,
-                        elf_objfmt_append_local_sym);
+    buildsym_info.objfmt_elf = objfmt_elf;
+    buildsym_info.errwarns = errwarns;
+    buildsym_info.local_names = all_syms;
+    yasm_symtab_traverse(object->symtab, &buildsym_info,
+                        elf_objfmt_build_symtab);
     elf_symtab_nlocal = elf_symtab_assign_indices(objfmt_elf->elf_symtab);
 
     /* output known sections - includes reloc sections which aren't in yasm's
@@ -959,135 +1112,11 @@ elf_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams,
     return retval;
 }
 
-static yasm_symrec *
-elf_objfmt_extern_declare(yasm_object *object, const char *name, /*@unused@*/
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
-    yasm_symrec *sym;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-    elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL,
-                             0, STV_DEFAULT, NULL, NULL);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-       for (; vp; vp = yasm_vps_next(vp))
-        {
-            if (vp->val)
-                yasm_error_set(YASM_ERROR_TYPE,
-                              N_("unrecognized symbol type `%s'"), vp->val);
-        }
-    }
-    return sym;
-}
-
-static yasm_symrec *
-elf_objfmt_global_declare(yasm_object *object, const char *name,
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
-    yasm_symrec *sym;
-    elf_symbol_type type = 0;
-    yasm_expr *size = NULL;
-    elf_symbol_vis vis = STV_DEFAULT;
-    unsigned int vis_overrides = 0;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-       for (; vp; vp = yasm_vps_next(vp))
-        {
-            if (vp->val) {
-                if (yasm__strcasecmp(vp->val, "function") == 0)
-                    type = STT_FUNC;
-                else if (yasm__strcasecmp(vp->val, "data") == 0 ||
-                         yasm__strcasecmp(vp->val, "object") == 0)
-                    type = STT_OBJECT;
-                else if (yasm__strcasecmp(vp->val, "internal") == 0) {
-                    vis = STV_INTERNAL;
-                    vis_overrides++;
-                }
-                else if (yasm__strcasecmp(vp->val, "hidden") == 0) {
-                    vis = STV_HIDDEN;
-                    vis_overrides++;
-                }
-                else if (yasm__strcasecmp(vp->val, "protected") == 0) {
-                    vis = STV_PROTECTED;
-                    vis_overrides++;
-                }
-                else
-                    yasm_error_set(YASM_ERROR_TYPE,
-                                  N_("unrecognized symbol type `%s'"),
-                                  vp->val);
-            }
-            else if (vp->param && !size) {
-                size = vp->param;
-                vp->param = NULL;      /* to avoid deleting the expr */
-            }
-       }
-        if (vis_overrides > 1) {
-            yasm_warn_set(YASM_WARN_GENERAL,
-                N_("More than one symbol visibility provided; using last"));
-        }
-    }
-
-    elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL,
-                             type, vis, size, NULL);
-
-    return sym;
-}
-
-static yasm_symrec *
-elf_objfmt_common_declare(yasm_object *object, const char *name,
-                         /*@only@*/ yasm_expr *size, /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
-    yasm_symrec *sym;
-    unsigned long addralign = 0;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-        for (; vp; vp = yasm_vps_next(vp)) {
-            if (!vp->val && vp->param) {
-                /*@dependent@*/ /*@null@*/ const yasm_intnum *align_expr;
-
-                align_expr = yasm_expr_get_intnum(&vp->param, 0);
-                if (!align_expr) {
-                    yasm_error_set(YASM_ERROR_VALUE,
-                       N_("alignment constraint is not an integer"));
-                    return sym;
-                }
-                addralign = yasm_intnum_get_uint(align_expr);
-
-                /* Alignments must be a power of two. */
-                if (!is_exp2(addralign)) {
-                    yasm_error_set(YASM_ERROR_VALUE,
-                        N_("alignment constraint is not a power of two"));
-                    return sym;
-                }
-            } else if (vp->val)
-                yasm_warn_set(YASM_WARN_GENERAL,
-                              N_("Unrecognized qualifier `%s'"), vp->val);
-        }
-    }
-
-    elf_objfmt_symtab_append(objfmt_elf, sym, SHN_COMMON, STB_GLOBAL,
-                             0, STV_DEFAULT, size, &addralign);
-
-    return sym;
-}
-
 static void
-dir_type(yasm_object *object, yasm_valparam *vp, unsigned long line)
+dir_type(yasm_object *object, yasm_valparamhead *valparams,
+        yasm_valparamhead *objext_valparams, unsigned long line)
 {
+    yasm_valparam *vp = yasm_vps_first(valparams);
     yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
     char *symname = vp->val;
     /* Get symbol elf data */
@@ -1116,8 +1145,10 @@ dir_type(yasm_object *object, yasm_valparam *vp, unsigned long line)
 }
 
 static void
-dir_size(yasm_object *object, yasm_valparam *vp, unsigned long line)
+dir_size(yasm_object *object, yasm_valparamhead *valparams,
+        yasm_valparamhead *objext_valparams, unsigned long line)
 {
+    yasm_valparam *vp = yasm_vps_first(valparams);
     yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
     char *symname = vp->val;
     /* Get symbol elf data */
@@ -1144,8 +1175,10 @@ dir_size(yasm_object *object, yasm_valparam *vp, unsigned long line)
 }
 
 static void
-dir_weak(yasm_object *object, yasm_valparam *vp, unsigned long line)
+dir_weak(yasm_object *object, yasm_valparamhead *valparams,
+        yasm_valparamhead *objext_valparams, unsigned long line)
 {
+    yasm_valparam *vp = yasm_vps_first(valparams);
     yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt;
     char *symname = vp->val;
     yasm_symrec *sym = yasm_symtab_declare(object->symtab, symname,
@@ -1155,11 +1188,13 @@ dir_weak(yasm_object *object, yasm_valparam *vp, unsigned long line)
 }
 
 static void
-dir_ident(yasm_object *object, yasm_valparam *vp, unsigned long line)
+dir_ident(yasm_object *object, yasm_valparamhead *valparams,
+         yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_valparamhead sect_vps;
     yasm_datavalhead dvs;
     yasm_section *comment;
+    yasm_valparam *vp = yasm_vps_first(valparams);
     yasm_valparam *vp2;
 
     /* Put ident data into .comment section */
@@ -1191,40 +1226,6 @@ dir_ident(yasm_object *object, yasm_valparam *vp, unsigned long line)
        yasm_bc_create_data(&dvs, 1, 1, object->arch, line));
 }
 
-static int
-elf_objfmt_directive(yasm_object *object, const char *name,
-                    /*@null@*/ yasm_valparamhead *valparams,
-                    /*@unused@*/ /*@null@*/
-                    yasm_valparamhead *objext_valparams,
-                    unsigned long line)
-{
-    static const struct {
-       const char *name;
-       void (*func) (yasm_object *, yasm_valparam *, unsigned long);
-    } dirs[] = {
-       {"TYPE", dir_type},
-       {"SIZE", dir_size},
-       {"WEAK", dir_weak},
-       {"IDENT", dir_ident}
-    };
-    size_t i;
-
-    for (i=0; i<NELEMS(dirs); i++) {
-       if (yasm__strcasecmp(name, dirs[i].name) == 0) {
-           yasm_valparam *vp;
-           if (!valparams || !(vp = yasm_vps_first(valparams)) || !vp->val) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("Symbol name not specified"));
-               return 0;
-           }
-           dirs[i].func(object, vp, line);
-           return 0;
-       }
-    }
-    return 1;  /* unrecognized */
-}
-
-
 /* Define valid debug formats to use with this object format */
 static const char *elf_objfmt_dbgfmt_keywords[] = {
     "null",
@@ -1233,6 +1234,18 @@ static const char *elf_objfmt_dbgfmt_keywords[] = {
     NULL
 };
 
+static const yasm_directive elf_objfmt_directives[] = {
+    { ".type",         "gas",  dir_type,       YASM_DIR_ID_REQUIRED },
+    { ".size",         "gas",  dir_size,       YASM_DIR_ID_REQUIRED },
+    { ".weak",         "gas",  dir_weak,       YASM_DIR_ID_REQUIRED },
+    { ".ident",                "gas",  dir_ident,      YASM_DIR_ARG_REQUIRED },
+    { "type",          "nasm", dir_type,       YASM_DIR_ID_REQUIRED },
+    { "size",          "nasm", dir_size,       YASM_DIR_ID_REQUIRED },
+    { "weak",          "nasm", dir_weak,       YASM_DIR_ID_REQUIRED },
+    { "ident",         "nasm", dir_ident,      YASM_DIR_ARG_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define objfmt structure -- see objfmt.h for details */
 yasm_objfmt_module yasm_elf_LTX_objfmt = {
     "ELF",
@@ -1241,15 +1254,12 @@ yasm_objfmt_module yasm_elf_LTX_objfmt = {
     32,
     elf_objfmt_dbgfmt_keywords,
     "null",
+    elf_objfmt_directives,
     elf_objfmt_create,
     elf_objfmt_output,
     elf_objfmt_destroy,
     elf_objfmt_add_default_section,
-    elf_objfmt_section_switch,
-    elf_objfmt_extern_declare,
-    elf_objfmt_global_declare,
-    elf_objfmt_common_declare,
-    elf_objfmt_directive
+    elf_objfmt_section_switch
 };
 
 yasm_objfmt_module yasm_elf32_LTX_objfmt = {
@@ -1259,15 +1269,12 @@ yasm_objfmt_module yasm_elf32_LTX_objfmt = {
     32,
     elf_objfmt_dbgfmt_keywords,
     "null",
+    elf_objfmt_directives,
     elf32_objfmt_create,
     elf_objfmt_output,
     elf_objfmt_destroy,
     elf_objfmt_add_default_section,
-    elf_objfmt_section_switch,
-    elf_objfmt_extern_declare,
-    elf_objfmt_global_declare,
-    elf_objfmt_common_declare,
-    elf_objfmt_directive
+    elf_objfmt_section_switch
 };
 
 yasm_objfmt_module yasm_elf64_LTX_objfmt = {
@@ -1277,13 +1284,10 @@ yasm_objfmt_module yasm_elf64_LTX_objfmt = {
     64,
     elf_objfmt_dbgfmt_keywords,
     "null",
+    elf_objfmt_directives,
     elf64_objfmt_create,
     elf_objfmt_output,
     elf_objfmt_destroy,
     elf_objfmt_add_default_section,
-    elf_objfmt_section_switch,
-    elf_objfmt_extern_declare,
-    elf_objfmt_global_declare,
-    elf_objfmt_common_declare,
-    elf_objfmt_directive
+    elf_objfmt_section_switch
 };
index 12fc58a972f6edfbdd4f7b048586b94d1d2ec633..52b69ec8e2d7c8c1cf3e5e2fe780bad2b8953a2f 100644 (file)
@@ -283,8 +283,6 @@ elf_symtab_entry_destroy(elf_symtab_entry *entry)
     if (entry == NULL)
        yasm_internal_error("symtab entry is null");
 
-    if (entry->xsize)
-       yasm_expr_destroy(entry->xsize);
     yasm_xfree(entry);
 }
 
index 1a75f91a6b5336d2358fce4ef4b626c9ba74579d..c78c5f9bacec06beab5f8d5df5811dce739acaaa 100644 (file)
@@ -391,7 +391,7 @@ struct elf_symtab_entry {
     yasm_section       *sect;
     elf_strtab_entry   *name;
     elf_address                 value;
-    yasm_expr          *xsize;
+    /*@dependent@*/ yasm_expr *xsize;
     elf_size            size;
     elf_section_index   index;
     elf_symbol_binding  bind;
index a5f6e1ad346c4d2edacf00a1618a0c79cf654395..f185d3d0d5c9b09b5f7df089128a49a10fe38012 100644 (file)
@@ -30,7 +30,7 @@
 00 
 00 
 00 
-b
+8
 10 
 00 
 00 
@@ -445,37 +445,6 @@ aa
 70 
 63 
 5f 
-65 
-66 
-66 
-65 
-63 
-74 
-69 
-76 
-65 
-5f 
-74 
-6f 
-5f 
-70 
-68 
-79 
-73 
-69 
-63 
-61 
-6c 
-5f 
-64 
-61 
-74 
-61 
-00 
-70 
-70 
-63 
-5f 
 77 
 72 
 69 
@@ -993,7 +962,6 @@ aa
 00 
 00 
 00 
-00 
 01 
 00 
 00 
@@ -3958,22 +3926,6 @@ e9
 01 
 00 
 00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-00 
-10 
-00 
-00 
-00 
-5e 
-01 
-00 
-00 
 05 
 00 
 00 
@@ -3986,7 +3938,7 @@ e9
 00 
 04 
 00 
-7b 
+5c 
 01 
 00 
 00 
@@ -4002,7 +3954,7 @@ e9
 00 
 04 
 00 
-98 
+79 
 01 
 00 
 00 
@@ -4018,7 +3970,7 @@ e9
 00 
 04 
 00 
-b5 
+96 
 01 
 00 
 00 
@@ -4034,7 +3986,7 @@ b5
 00 
 04 
 00 
-d3 
+b4 
 01 
 00 
 00 
@@ -4050,7 +4002,7 @@ d3
 00 
 04 
 00 
-f1 
+d2 
 01 
 00 
 00 
@@ -4066,8 +4018,8 @@ f1
 00 
 04 
 00 
-13 
-02 
+f4 
+01 
 00 
 00 
 05 
@@ -4082,7 +4034,7 @@ f1
 00 
 04 
 00 
-2f 
+10 
 02 
 00 
 00 
@@ -4098,7 +4050,7 @@ f1
 00 
 04 
 00 
-4d 
+2e 
 02 
 00 
 00 
@@ -4114,7 +4066,7 @@ f1
 00 
 04 
 00 
-6b 
+4c 
 02 
 00 
 00 
@@ -4130,7 +4082,7 @@ f1
 00 
 04 
 00 
-87 
+68 
 02 
 00 
 00 
@@ -4146,7 +4098,7 @@ f1
 00 
 04 
 00 
-a4 
+85 
 02 
 00 
 00 
@@ -4162,7 +4114,7 @@ a4
 00 
 04 
 00 
-c1 
+a2 
 02 
 00 
 00 
@@ -4178,7 +4130,7 @@ c1
 00 
 04 
 00 
-e2 
+c3 
 02 
 00 
 00 
@@ -4194,8 +4146,8 @@ e2
 00 
 04 
 00 
-01 
-03 
+e2 
+02 
 00 
 00 
 05 
@@ -4210,7 +4162,7 @@ e2
 00 
 04 
 00 
-22 
+03 
 03 
 00 
 00 
@@ -4226,7 +4178,7 @@ e2
 00 
 04 
 00 
-33 
+14 
 03 
 00 
 00 
@@ -4242,7 +4194,7 @@ e2
 00 
 04 
 00 
-45 
+26 
 03 
 00 
 00 
@@ -4370,7 +4322,7 @@ e2
 00 
 00 
 00 
-56 
+37 
 03 
 00 
 00 
@@ -4406,11 +4358,11 @@ e2
 00 
 00 
 00 
-d
+b
 03 
 00 
 00 
-d
+c
 0c 
 00 
 00 
index 13203106ba1a0cdda461828bf8733af8a222f23d..32d20722ac297c43c933261e1bd52aa51ded18ab 100644 (file)
@@ -4,3 +4,8 @@ global ghidden:hidden
 global ginternal:internal
 global gprotected:protected
 global gtoomany:hidden internal
+
+ghidden:
+ginternal:
+gprotected:
+gtoomany:
index c4ace91f6c8677f47d77ce965d1582a26edc35b6..8da06880ed3c97a19d1bcf6b26c8a1e11427face 100644 (file)
@@ -204,7 +204,7 @@ ff
 00 
 10 
 02 
-00 
+04 
 00 
 0b 
 00 
@@ -220,7 +220,7 @@ ff
 00 
 10 
 01 
-00 
+04 
 00 
 15 
 00 
@@ -236,7 +236,7 @@ ff
 00 
 10 
 03 
-00 
+04 
 00 
 20 
 00 
@@ -252,7 +252,7 @@ ff
 00 
 10 
 01 
-00 
+04 
 00 
 00 
 00 
index c4dc66fbf53e999f9da81377346aef92114856f2..906cce87abff65e6ef580755204a822b3493c5dc 100644 (file)
@@ -730,15 +730,15 @@ ff
 2d 
 00 
 5f 
-5a 
-45 
-52 
-4f 
 56 
 41 
 52 
 00 
 5f 
+5a 
+45 
+52 
+4f 
 56 
 41 
 52 
@@ -870,7 +870,7 @@ c0
 00 
 00 
 00 
-03 
+08 
 00 
 00 
 00 
@@ -894,7 +894,7 @@ c0
 00 
 00 
 00 
-0c 
+03 
 00 
 00 
 00 
index ac7eacce3d214504cb8f6d92d218a41fcfce8540..b07bbe0bf54cd6e3386f5f2577dcb57fed7cf762 100644 (file)
@@ -293,7 +293,6 @@ typedef struct macho_section_data {
 
 
 typedef struct macho_symrec_data {
-    /*@owned@*/ /*@null@*/ yasm_expr *size; /* size if COMMON declaration */
     unsigned long index;       /* index in output order */
     yasm_intnum *value;                /* valid after writing symtable to file */
     unsigned long length;      /* length + 1 (plus auto underscore) */
@@ -948,13 +947,14 @@ macho_objfmt_output_symtable(yasm_symrec *sym, /*@null@*/ void *d)
            scnum = -1;
            /*n_desc = REFERENCE_FLAG_UNDEFINED_LAZY;   * FIXME: see definition of REFERENCE_FLAG_* above */
        } else if (vis & YASM_SYM_COMMON) {
+           yasm_expr **csize = yasm_symrec_get_common_size(sym);
            n_type = N_UNDF | N_EXT;
-           if (symd) {
-               intn = yasm_expr_get_intnum(&symd->size, 1);
+           if (csize) {
+               intn = yasm_expr_get_intnum(csize, 1);
                if (!intn) {
                    yasm_error_set(YASM_ERROR_NOT_CONSTANT,
                                   N_("COMMON data size not an integer expression"));
-                   yasm_errwarn_propagate(info->errwarns, symd->size->line);
+                   yasm_errwarn_propagate(info->errwarns, (*csize)->line);
                } else
                    yasm_intnum_set_uint(val, yasm_intnum_get_uint(intn));
            }
@@ -1500,48 +1500,9 @@ macho_section_data_print(void *data, FILE *f, int indent_level)
     fprintf(f, "%*soffset=%ld\n", indent_level, "", msd->offset);
 }
 
-static yasm_symrec *
-macho_objfmt_extern_declare(yasm_object *object, const char *name, /*@unused@*/
-                           /*@null@*/ yasm_valparamhead *objext_valparams,
-                           unsigned long line)
-{
-    return yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-}
-
-static yasm_symrec *
-macho_objfmt_global_declare(yasm_object *object, const char *name, /*@unused@*/
-                           /*@null@*/ yasm_valparamhead *objext_valparams,
-                           unsigned long line)
-{
-    return yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-}
-
-static yasm_symrec *
-macho_objfmt_common_declare(yasm_object *object, const char *name,
-                           /*@only@*/ yasm_expr *size,
-                           /*@unused@*/ /*@null@*/
-                           yasm_valparamhead *objext_valparams,
-                           unsigned long line)
-{
-    yasm_symrec *sym;
-    macho_symrec_data *sym_data;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-
-    sym_data = yasm_xmalloc(sizeof(macho_symrec_data));
-
-    sym_data->size = size;
-    yasm_symrec_add_data(sym, &macho_symrec_data_cb, sym_data);
-    return sym;
-}
-
 static void
 macho_symrec_data_destroy(void *data)
 {
-    macho_symrec_data *csymd = (macho_symrec_data *)data;
-
-    if (csymd->size)
-       yasm_expr_destroy(csymd->size);
     yasm_xfree(data);
 }
 
@@ -1550,12 +1511,6 @@ macho_symrec_data_print(void *data, FILE *f, int indent_level)
 {
     macho_symrec_data *msd = (macho_symrec_data *)data;
 
-    fprintf(f, "%*ssize=", indent_level, "");
-    if (msd->size)
-       yasm_expr_print(msd->size, f);
-    else
-       fprintf(f, "nil");
-    fprintf(f, "\n");
     fprintf(f, "%*sindex=%ld\n", indent_level, "", msd->index);
     fprintf(f, "%*svalue=", indent_level, "");
     if (msd->value)
@@ -1565,18 +1520,6 @@ macho_symrec_data_print(void *data, FILE *f, int indent_level)
 }
 
 
-static int
-macho_objfmt_directive(/*@unused@*/ yasm_object *object,
-                      /*@unused@*/ const char *name,
-                      /*@unused@*/ /*@null@*/ yasm_valparamhead *valparams,
-                      /*@unused@*/ /*@null@*/
-                      yasm_valparamhead *objext_valparams,
-                      /*@unused@*/ unsigned long line)
-{
-    return 1;                  /* no objfmt directives */
-}
-
-
 /* Define valid debug formats to use with this object format */
 static const char *macho_objfmt_dbgfmt_keywords[] = {
     "null",
@@ -1591,15 +1534,12 @@ yasm_objfmt_module yasm_macho_LTX_objfmt = {
     32,
     macho_objfmt_dbgfmt_keywords,
     "null",
+    NULL,   /* no directives */
     macho_objfmt_create,
     macho_objfmt_output,
     macho_objfmt_destroy,
     macho_objfmt_add_default_section,
-    macho_objfmt_section_switch,
-    macho_objfmt_extern_declare,
-    macho_objfmt_global_declare,
-    macho_objfmt_common_declare,
-    macho_objfmt_directive
+    macho_objfmt_section_switch
 };
 
 yasm_objfmt_module yasm_macho32_LTX_objfmt = {
@@ -1609,15 +1549,12 @@ yasm_objfmt_module yasm_macho32_LTX_objfmt = {
     32,
     macho_objfmt_dbgfmt_keywords,
     "null",
+    NULL,   /* no directives */
     macho32_objfmt_create,
     macho_objfmt_output,
     macho_objfmt_destroy,
     macho_objfmt_add_default_section,
-    macho_objfmt_section_switch,
-    macho_objfmt_extern_declare,
-    macho_objfmt_global_declare,
-    macho_objfmt_common_declare,
-    macho_objfmt_directive
+    macho_objfmt_section_switch
 };
 
 yasm_objfmt_module yasm_macho64_LTX_objfmt = {
@@ -1627,13 +1564,10 @@ yasm_objfmt_module yasm_macho64_LTX_objfmt = {
     64,
     macho_objfmt_dbgfmt_keywords,
     "null",
+    NULL,   /* no directives */
     macho64_objfmt_create,
     macho_objfmt_output,
     macho_objfmt_destroy,
     macho_objfmt_add_default_section,
-    macho_objfmt_section_switch,
-    macho_objfmt_extern_declare,
-    macho_objfmt_global_declare,
-    macho_objfmt_common_declare,
-    macho_objfmt_directive
+    macho_objfmt_section_switch
 };
index 5d7eace73ca1b4dd9cb20d86960d321e71aa9b77..541935de6cdd42f03ed021d2734187032c5bc430 100644 (file)
@@ -100,10 +100,6 @@ typedef struct rdf_section_data {
 } rdf_section_data;
 
 typedef struct rdf_symrec_data {
-    /*@owned@*/ /*@null@*/ yasm_expr *size; /* size if COMMON declaration */
-    unsigned long align;               /* alignment if COMMON declaration */
-
-    unsigned int flags;                        /* import/export/type flags */
     unsigned int segment;              /* assigned RDF "segment" index */
 } rdf_symrec_data;
 
@@ -156,16 +152,11 @@ yasm_objfmt_module yasm_rdf_LTX_objfmt;
 
 
 static /*@dependent@*/ rdf_symrec_data *
-rdf_objfmt_sym_set_data(yasm_symrec *sym,
-                       /*@only@*/ /*@null@*/ yasm_expr *size,
-                       unsigned long align, unsigned int flags)
+rdf_objfmt_sym_set_data(yasm_symrec *sym, unsigned int segment)
 {
     rdf_symrec_data *rsymd = yasm_xmalloc(sizeof(rdf_symrec_data));
 
-    rsymd->size = size;
-    rsymd->align = align;
-    rsymd->flags = flags;
-    rsymd->segment = 0;
+    rsymd->segment = segment;
 
     yasm_symrec_add_data(sym, &rdf_symrec_data_cb, rsymd);
     return rsymd;
@@ -484,6 +475,72 @@ rdf_objfmt_output_section_file(yasm_section *sect, /*@null@*/ void *d)
     return 0;
 }
 
+static unsigned int
+rdf_parse_flags(yasm_symrec *sym)
+{
+    yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
+    /*@dependent@*/ /*@null@*/ yasm_valparamhead *objext_valparams =
+       yasm_symrec_get_objext_valparams(sym);
+    yasm_valparam *vp;
+    unsigned int flags = 0;
+
+    static const struct {
+       enum {
+           FLAG_EXT = 1,
+           FLAG_GLOB = 2
+       } type;
+       enum {
+           FLAG_SET = 1,
+           FLAG_CLR = 2
+       } action;
+       const char *name;
+       unsigned int flags;
+    } flagtbl[] = {
+       { FLAG_EXT|FLAG_GLOB, FLAG_SET, "data", SYM_DATA },
+       { FLAG_EXT|FLAG_GLOB, FLAG_SET, "object", SYM_DATA },
+       { FLAG_EXT|FLAG_GLOB, FLAG_SET, "proc", SYM_FUNCTION },
+       { FLAG_EXT|FLAG_GLOB, FLAG_SET, "function", SYM_FUNCTION },
+       { FLAG_EXT, FLAG_SET, "import", SYM_IMPORT },
+       { FLAG_GLOB, FLAG_SET, "export", SYM_GLOBAL },
+       { FLAG_EXT, FLAG_SET, "far", SYM_FAR },
+       { FLAG_EXT, FLAG_CLR, "near", SYM_FAR },
+    };
+
+    if (!objext_valparams)
+       return 0;
+
+    vp = yasm_vps_first(objext_valparams);
+    for (; vp; vp = yasm_vps_next(vp)) {
+       size_t i;
+       int match;
+
+       if (!vp->val) {
+           yasm_warn_set(YASM_WARN_GENERAL,
+                         N_("Unrecognized numeric qualifier"));
+           continue;
+       }
+
+       match = 0;
+       for (i=0; i<NELEMS(flagtbl) && !match; i++) {
+           if ((((vis & YASM_SYM_GLOBAL) && (flagtbl[i].type & FLAG_GLOB)) ||
+                ((vis & YASM_SYM_EXTERN) && (flagtbl[i].type & FLAG_EXT))) &&
+               yasm__strcasecmp(vp->val, flagtbl[i].name) == 0) {
+               if (flagtbl[i].action == FLAG_SET)
+                   flags |= flagtbl[i].flags;
+               else if (flagtbl[i].action == FLAG_CLR)
+                   flags &= ~flagtbl[i].flags;
+               match = 1;
+           }
+       }
+
+       if (!match)
+           yasm_warn_set(YASM_WARN_GENERAL, N_("Unrecognized qualifier `%s'"),
+                         vp->val);
+    }
+
+    return flags;
+}
+
 static int
 rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
 {
@@ -496,7 +553,6 @@ rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
     /*@dependent@*/ /*@null@*/ yasm_section *sect;
     /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc;
     unsigned char *localbuf;
-    rdf_symrec_data *rsymd;
 
     assert(info != NULL);
 
@@ -521,15 +577,16 @@ rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
        } else if (yasm_section_is_absolute(sect)) {
            yasm_warn_set(YASM_WARN_GENERAL,
                          N_("rdf does not support exporting absolutes"));
-           yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_line(sym));
+           yasm_errwarn_propagate(info->errwarns,
+                                  yasm_symrec_get_decl_line(sym));
            return 0;
        } else
            yasm_internal_error(N_("didn't understand section"));
        value = yasm_bc_next_offset(precbc);
     } else if (yasm_symrec_get_equ(sym)) {
        yasm_warn_set(YASM_WARN_GENERAL,
-                     N_("rdf does not support exporting EQU/absolute values"));
-       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_line(sym));
+           N_("rdf does not support exporting EQU/absolute values"));
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
        return 0;
     }
 
@@ -540,50 +597,72 @@ rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
        yasm_warn_set(YASM_WARN_GENERAL,
                      N_("label name too long, truncating to %d bytes"),
                      EXIM_LABEL_MAX);
-       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_line(sym));
        len = EXIM_LABEL_MAX-1;
     }
 
     localbuf = info->buf;
     if (vis & YASM_SYM_GLOBAL) {
-       rsymd = yasm_symrec_get_data(sym, &rdf_symrec_data_cb);
-       if (!rsymd)
-           yasm_internal_error(N_("rdf: no symbol data for global symbol"));
        YASM_WRITE_8(localbuf, RDFREC_GLOBAL);
        YASM_WRITE_8(localbuf, 6+len+1);        /* record length */
-       YASM_WRITE_8(localbuf, rsymd->flags);   /* flags */
+       YASM_WRITE_8(localbuf, rdf_parse_flags(sym));   /* flags */
        YASM_WRITE_8(localbuf, scnum);          /* segment referred to */
        YASM_WRITE_32_L(localbuf, value);       /* offset */
     } else {
-       /* Create new symrec data if it doesn't already exist */
-       rsymd = yasm_symrec_get_data(sym, &rdf_symrec_data_cb);
-       if (!rsymd)
-           rsymd = rdf_objfmt_sym_set_data(sym, NULL, 0, 0);
-
        /* Save symbol segment in symrec data (for later reloc gen) */
-       rsymd->segment = info->indx++;
-       scnum = rsymd->segment;
+       scnum = info->indx++;
+       rdf_objfmt_sym_set_data(sym, scnum);
 
        if (vis & YASM_SYM_COMMON) {
+           /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr;
            const yasm_intnum *intn;
+           /*@dependent@*/ /*@null@*/ yasm_valparamhead *objext_valparams =
+               yasm_symrec_get_objext_valparams(sym);
+           unsigned long addralign = 0;
 
            YASM_WRITE_8(localbuf, RDFREC_COMMON);
            YASM_WRITE_8(localbuf, 8+len+1);    /* record length */
            YASM_WRITE_16_L(localbuf, scnum);   /* segment allocated */
 
            /* size */
-           intn = yasm_expr_get_intnum(&rsymd->size, 1);
+           csize_expr = yasm_symrec_get_common_size(sym);
+           assert(csize_expr != NULL);
+           intn = yasm_expr_get_intnum(csize_expr, 1);
            if (!intn) {
                yasm_error_set(YASM_ERROR_NOT_CONSTANT,
                    N_("COMMON data size not an integer expression"));
-               yasm_errwarn_propagate(info->errwarns,
-                                      yasm_symrec_get_line(sym));
            } else
                value = yasm_intnum_get_uint(intn);
            YASM_WRITE_32_L(localbuf, value);
-           YASM_WRITE_16_L(localbuf, rsymd->align);    /* alignment */
+
+           /* alignment */
+           if (objext_valparams) {
+               yasm_valparam *vp = yasm_vps_first(objext_valparams);
+               for (; vp; vp = yasm_vps_next(vp)) {
+                   if (!vp->val && vp->param) {
+                       /*@null@*/ const yasm_intnum *align_expr;
+
+                       align_expr = yasm_expr_get_intnum(&vp->param, 0);
+                       if (!align_expr) {
+                           yasm_error_set(YASM_ERROR_VALUE,
+                               N_("alignment constraint is not an integer"));
+                           continue;
+                       }
+                       addralign = yasm_intnum_get_uint(align_expr);
+
+                       /* Alignments must be a power of two. */
+                       if (!is_exp2(addralign)) {
+                           yasm_error_set(YASM_ERROR_VALUE,
+                               N_("alignment constraint is not a power of two"));
+                           continue;
+                       }
+                   } else if (vp->val)
+                       yasm_warn_set(YASM_WARN_GENERAL,
+                            N_("Unrecognized qualifier `%s'"), vp->val);
+               }
+           }
+           YASM_WRITE_16_L(localbuf, addralign);
        } else if (vis & YASM_SYM_EXTERN) {
-           unsigned int flags = rsymd->flags;
+           unsigned int flags = rdf_parse_flags(sym);
            if (flags & SYM_FAR) {
                YASM_WRITE_8(localbuf, RDFREC_FARIMPORT);
                flags &= ~SYM_FAR;
@@ -601,6 +680,8 @@ rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
     YASM_WRITE_8(localbuf, 0);         /* 0-terminated name */
 
     fwrite(info->buf, (unsigned long)(localbuf-info->buf), 1, info->f);
+
+    yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
     return 0;
 }
 
@@ -917,163 +998,9 @@ rdf_section_data_print(void *data, FILE *f, int indent_level)
     fprintf(f, "%*ssize=%ld\n", indent_level, "", rsd->size);
 }
 
-static yasm_symrec *
-rdf_objfmt_extern_declare(yasm_object *object, const char *name, /*@unused@*/
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-    unsigned int flags = 0;
-
-    static const struct {
-       const char *name;
-       unsigned int flags;
-    } flagnames[] = {
-       { "data", SYM_DATA },
-       { "object", SYM_DATA },
-       { "proc", SYM_FUNCTION },
-       { "function", SYM_FUNCTION },
-       { "import", SYM_IMPORT },
-       { "far", SYM_FAR },
-    };
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-        for (; vp; vp = yasm_vps_next(vp)) {
-           size_t i;
-           int match;
-
-           if (!vp->val) {
-               yasm_warn_set(YASM_WARN_GENERAL,
-                             N_("Unrecognized numeric qualifier"));
-               continue;
-           }
-
-           match = 0;
-           for (i=0; i<NELEMS(flagnames) && !match; i++) {
-               if (yasm__strcasecmp(vp->val, flagnames[i].name) == 0) {
-                   flags |= flagnames[i].flags;
-                   match = 1;
-               }
-           }
-
-           if (yasm__strcasecmp(vp->val, "near") == 0) {
-               flags &= ~SYM_FAR;
-               match = 1;
-           }
-
-           if (!match)
-               yasm_warn_set(YASM_WARN_GENERAL,
-                             N_("Unrecognized qualifier `%s'"), vp->val);
-       }
-    }
-
-    /* Remember flags */
-    rdf_objfmt_sym_set_data(sym, NULL, 0, flags);
-    return sym;
-}
-
-static yasm_symrec *
-rdf_objfmt_global_declare(yasm_object *object, const char *name, /*@unused@*/
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-    unsigned int flags = 0;
-
-    static const struct {
-       const char *name;
-       unsigned int flags;
-    } flagnames[] = {
-       { "data", SYM_DATA },
-       { "object", SYM_DATA },
-       { "proc", SYM_FUNCTION },
-       { "function", SYM_FUNCTION },
-       { "export", SYM_GLOBAL },
-    };
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-        for (; vp; vp = yasm_vps_next(vp)) {
-           size_t i;
-           int match;
-
-           if (!vp->val) {
-               yasm_warn_set(YASM_WARN_GENERAL,
-                             N_("Unrecognized numeric qualifier"));
-               continue;
-           }
-
-           match = 0;
-           for (i=0; i<NELEMS(flagnames) && !match; i++) {
-               if (yasm__strcasecmp(vp->val, flagnames[i].name) == 0) {
-                   flags |= flagnames[i].flags;
-                   match = 1;
-               }
-           }
-           if (!match)
-               yasm_warn_set(YASM_WARN_GENERAL,
-                             N_("Unrecognized qualifier `%s'"), vp->val);
-       }
-    }
-
-    /* Remember flags */
-    rdf_objfmt_sym_set_data(sym, NULL, 0, flags);
-    return sym;
-}
-
-static yasm_symrec *
-rdf_objfmt_common_declare(yasm_object *object, const char *name,
-                         /*@only@*/ yasm_expr *size,
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_symrec *sym;
-    unsigned long addralign = 0;
-
-    sym = yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-
-    if (objext_valparams) {
-       yasm_valparam *vp = yasm_vps_first(objext_valparams);
-        for (; vp; vp = yasm_vps_next(vp)) {
-            if (!vp->val && vp->param) {
-                /*@dependent@*/ /*@null@*/ const yasm_intnum *align_expr;
-
-                align_expr = yasm_expr_get_intnum(&vp->param, 0);
-                if (!align_expr) {
-                    yasm_error_set(YASM_ERROR_VALUE,
-                       N_("alignment constraint is not an integer"));
-                    return sym;
-                }
-                addralign = yasm_intnum_get_uint(align_expr);
-
-                /* Alignments must be a power of two. */
-                if (!is_exp2(addralign)) {
-                    yasm_error_set(YASM_ERROR_VALUE,
-                        N_("alignment constraint is not a power of two"));
-                    return sym;
-                }
-            } else if (vp->val)
-                yasm_warn_set(YASM_WARN_GENERAL,
-                              N_("Unrecognized qualifier `%s'"), vp->val);
-        }
-    }
-
-    /* Remember size and alignment */
-    rdf_objfmt_sym_set_data(sym, size, addralign, 0);
-    return sym;
-}
-
 static void
 rdf_symrec_data_destroy(void *data)
 {
-    rdf_symrec_data *rsymd = (rdf_symrec_data *)data;
-    if (rsymd->size)
-       yasm_expr_destroy(rsymd->size);
     yasm_xfree(data);
 }
 
@@ -1083,47 +1010,17 @@ rdf_symrec_data_print(void *data, FILE *f, int indent_level)
     rdf_symrec_data *rsymd = (rdf_symrec_data *)data;
 
     fprintf(f, "%*ssymtab segment=%u\n", indent_level, "", rsymd->segment);
-    fprintf(f, "%*ssize=", indent_level, "");
-    if (rsymd->size)
-       yasm_expr_print(rsymd->size, f);
-    else
-       fprintf(f, "nil");
-    fprintf(f, "%*salign=%lu\n", indent_level, "", rsymd->align);
 }
 
-static int
-rdf_objfmt_directive(yasm_object *object, const char *name,
-                    /*@null@*/ yasm_valparamhead *valparams,
-                    /*@unused@*/ /*@null@*/
-                    yasm_valparamhead *objext_valparams, unsigned long line)
+static void
+rdf_objfmt_add_libmodule(yasm_object *object, char *name, int lib)
 {
     yasm_objfmt_rdf *objfmt_rdf = (yasm_objfmt_rdf *)object->objfmt;
-    int lib;
-    yasm_valparam *vp;
     xdf_str *str;
 
-    if (yasm__strcasecmp(name, "library") == 0)
-       lib = 1;
-    else if (yasm__strcasecmp(name, "module") == 0)
-       lib = 0;
-    else
-       return 1;
-
-    if (!valparams) {
-       yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"),
-                      name);
-       return 0;
-    }
-    vp = yasm_vps_first(valparams);
-    if (!vp->val) {
-       yasm_error_set(YASM_ERROR_SYNTAX, N_("argument to [%s] must be name"),
-                      name);
-       return 0;
-    }
-
     /* Add to list */
     str = yasm_xmalloc(sizeof(xdf_str));
-    str->str = vp->val;
+    str->str = name;
     if (lib)
        STAILQ_INSERT_TAIL(&objfmt_rdf->library_names, str, link);
     else
@@ -1135,11 +1032,25 @@ rdf_objfmt_directive(yasm_object *object, const char *name,
                      MODLIB_NAME_MAX);
        str->str[MODLIB_NAME_MAX-1] = '\0';
     }
+}
 
+static void
+dir_library(yasm_object *object, yasm_valparamhead *valparams,
+           yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp = yasm_vps_first(valparams);
+    rdf_objfmt_add_libmodule(object, vp->val, 1);
     vp->val = NULL;    /* don't free it */
-    return 0;
 }
 
+static void
+dir_module(yasm_object *object, yasm_valparamhead *valparams,
+          yasm_valparamhead *objext_valparams, unsigned long line)
+{
+    yasm_valparam *vp = yasm_vps_first(valparams);
+    rdf_objfmt_add_libmodule(object, vp->val, 0);
+    vp->val = NULL;    /* don't free it */
+}
 
 /* Define valid debug formats to use with this object format */
 static const char *rdf_objfmt_dbgfmt_keywords[] = {
@@ -1147,6 +1058,12 @@ static const char *rdf_objfmt_dbgfmt_keywords[] = {
     NULL
 };
 
+static const yasm_directive rdf_objfmt_directives[] = {
+    { "library",       "nasm", dir_library,    YASM_DIR_ID_REQUIRED },
+    { "module",                "nasm", dir_module,     YASM_DIR_ID_REQUIRED },
+    { NULL, NULL, NULL, 0 }
+};
+
 /* Define objfmt structure -- see objfmt.h for details */
 yasm_objfmt_module yasm_rdf_LTX_objfmt = {
     "Relocatable Dynamic Object File Format (RDOFF) v2.0",
@@ -1155,13 +1072,10 @@ yasm_objfmt_module yasm_rdf_LTX_objfmt = {
     32,
     rdf_objfmt_dbgfmt_keywords,
     "null",
+    rdf_objfmt_directives,
     rdf_objfmt_create,
     rdf_objfmt_output,
     rdf_objfmt_destroy,
     rdf_objfmt_add_default_section,
-    rdf_objfmt_section_switch,
-    rdf_objfmt_extern_declare,
-    rdf_objfmt_global_declare,
-    rdf_objfmt_common_declare,
-    rdf_objfmt_directive
+    rdf_objfmt_section_switch
 };
index 19ecde39082a45bbdaa9ce81a63584122fbceed8..ecaaa3b5056dfab8df69d527676973dd0b239fc9 100644 (file)
@@ -1,2 +1,2 @@
--:2: warning: rdf does not support exporting EQU/absolute values
--:4: warning: rdf does not support exporting EQU/absolute values
+-:6: warning: rdf does not support exporting EQU/absolute values
+-:7: warning: rdf does not support exporting EQU/absolute values
index 9e852216bd42378e3a3697bbe1fb446ce6ab1b5c..48bcae386fed644853ff545bc1ce40fdbf6d6e07 100644 (file)
@@ -434,8 +434,16 @@ static int
 xdf_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d)
 {
     /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d;
+    yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
     assert(info != NULL);
-    if (info->all_syms || yasm_symrec_get_visibility(sym) != YASM_SYM_LOCAL) {
+    if (vis & YASM_SYM_COMMON) {
+       yasm_error_set(YASM_ERROR_GENERAL,
+           N_("XDF object format does not support common variables"));
+       yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym));
+       return 0;
+    }
+    if (info->all_syms ||
+       (vis != YASM_SYM_LOCAL && !(vis & YASM_SYM_DLOCAL))) {
        /* Save index in symrec data */
        xdf_symrec_data *sym_data = yasm_xmalloc(sizeof(xdf_symrec_data));
        sym_data->index = info->indx;
@@ -813,35 +821,6 @@ xdf_section_data_print(void *data, FILE *f, int indent_level)
     fprintf(f, "%*snreloc=%ld\n", indent_level, "", xsd->nreloc);
 }
 
-static yasm_symrec *
-xdf_objfmt_extern_declare(yasm_object *object, const char *name, /*@unused@*/
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    return yasm_symtab_declare(object->symtab, name, YASM_SYM_EXTERN, line);
-}
-
-static yasm_symrec *
-xdf_objfmt_global_declare(yasm_object *object, const char *name, /*@unused@*/
-                         /*@null@*/ yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    return yasm_symtab_declare(object->symtab, name, YASM_SYM_GLOBAL, line);
-}
-
-static yasm_symrec *
-xdf_objfmt_common_declare(yasm_object *object, const char *name,
-                         /*@only@*/ yasm_expr *size, /*@unused@*/ /*@null@*/
-                         yasm_valparamhead *objext_valparams,
-                         unsigned long line)
-{
-    yasm_expr_destroy(size);
-    yasm_error_set(YASM_ERROR_GENERAL,
-       N_("XDF object format does not support common variables"));
-
-    return yasm_symtab_declare(object->symtab, name, YASM_SYM_COMMON, line);
-}
-
 static void
 xdf_symrec_data_destroy(void *data)
 {
@@ -856,18 +835,6 @@ xdf_symrec_data_print(void *data, FILE *f, int indent_level)
     fprintf(f, "%*ssymtab index=%lu\n", indent_level, "", xsd->index);
 }
 
-static int
-xdf_objfmt_directive(/*@unused@*/ yasm_object *object,
-                     /*@unused@*/ const char *name,
-                     /*@unused@*/ /*@null@*/ yasm_valparamhead *valparams,
-                     /*@unused@*/ /*@null@*/
-                     yasm_valparamhead *objext_valparams,
-                     /*@unused@*/ unsigned long line)
-{
-    return 1;  /* no objfmt directives */
-}
-
-
 /* Define valid debug formats to use with this object format */
 static const char *xdf_objfmt_dbgfmt_keywords[] = {
     "null",
@@ -882,13 +849,10 @@ yasm_objfmt_module yasm_xdf_LTX_objfmt = {
     32,
     xdf_objfmt_dbgfmt_keywords,
     "null",
+    NULL,      /* no directives */
     xdf_objfmt_create,
     xdf_objfmt_output,
     xdf_objfmt_destroy,
     xdf_objfmt_add_default_section,
-    xdf_objfmt_section_switch,
-    xdf_objfmt_extern_declare,
-    xdf_objfmt_global_declare,
-    xdf_objfmt_common_declare,
-    xdf_objfmt_directive
+    xdf_objfmt_section_switch
 };
index 0ece974734d7481e7da6006b83618a1036737e53..67a572e3e11cc0b40b1ecba9535661c67b98b07d 100644 (file)
@@ -42,8 +42,6 @@ RCSID("$Id$");
 static yasm_bytecode *parse_line(yasm_parser_gas *parser_gas);
 static yasm_bytecode *parse_instr(yasm_parser_gas *parser_gas);
 static int parse_dirvals(yasm_parser_gas *parser_gas, yasm_valparamhead *vps);
-static int parse_dirstrvals(yasm_parser_gas *parser_gas,
-                           yasm_valparamhead *vps);
 static int parse_datavals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs);
 static int parse_strvals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs);
 static yasm_effaddr *parse_memaddr(yasm_parser_gas *parser_gas);
@@ -171,25 +169,18 @@ expect_(yasm_parser_gas *parser_gas, int token)
        case DIR_COMM:
        case DIR_DATA:
        case DIR_ENDR:
-       case DIR_EXTERN:
        case DIR_EQU:
        case DIR_FILE:
        case DIR_FILL:
-       case DIR_GLOBAL:
-       case DIR_IDENT:
        case DIR_LEB128:
        case DIR_LINE:
-       case DIR_LOC:
        case DIR_LOCAL:
        case DIR_LCOMM:
        case DIR_ORG:
        case DIR_REPT:
        case DIR_SECTION:
        case DIR_SECTNAME:
-       case DIR_SIZE:
        case DIR_SKIP:
-       case DIR_TYPE:
-       case DIR_WEAK:
        case DIR_ZERO:
            str = "expected directive";
            break;
@@ -253,14 +244,18 @@ parse_line(yasm_parser_gas *parser_gas)
     switch (curtok) {
        case ID:
            id = ID_val;
+           parser_gas->state = INSTDIR;
            get_next_token(); /* ID */
            if (curtok == ':') {
                /* Label */
+               parser_gas->state = INITIAL;
                get_next_token(); /* : */
                define_label(parser_gas, id, 0);
                return parse_line(parser_gas);
            } else if (curtok == '=') {
                /* EQU */
+               /* TODO: allow redefinition, assigning to . (same as .org) */
+               parser_gas->state = INITIAL;
                get_next_token(); /* = */
                e = parse_expr(parser_gas);
                if (e)
@@ -271,7 +266,16 @@ parse_line(yasm_parser_gas *parser_gas)
                yasm_xfree(id);
                return NULL;
            }
-           /* must be an error at this point */
+
+           /* possibly a directive; try to parse it */
+           parse_dirvals(parser_gas, &vps);
+           if (!yasm_object_directive(p_object, id, "gas", &vps, NULL,
+                                      cur_line)) {
+               yasm_vps_delete(&vps);
+               yasm_xfree(id);
+               return NULL;
+           }
+           yasm_vps_delete(&vps);
            if (id[0] == '.')
                yasm_warn_set(YASM_WARN_GENERAL,
                              N_("directive `%s' not recognized"), id);
@@ -399,13 +403,6 @@ parse_line(yasm_parser_gas *parser_gas)
            yasm_xfree(ID_val);
            get_next_token(); /* ID */
            return NULL;
-       case DIR_GLOBAL:
-           get_next_token(); /* DIR_GLOBAL */
-           if (!expect(ID)) return NULL;
-           yasm_objfmt_global_declare(p_object, ID_val, NULL, cur_line);
-           yasm_xfree(ID_val);
-           get_next_token(); /* ID */
-           return NULL;
        case DIR_COMM:
        case DIR_LCOMM:
        {
@@ -441,41 +438,24 @@ parse_line(yasm_parser_gas *parser_gas)
                define_lcomm(parser_gas, id, e, align);
            } else if (align) {
                /* Give third parameter as objext valparam */
-               yasm_vps_initialize(&vps);
+               yasm_valparamhead *extvps = yasm_vps_create();
                vp = yasm_vp_create(NULL, align);
-               yasm_vps_append(&vps, vp);
+               yasm_vps_append(extvps, vp);
 
-               yasm_objfmt_common_declare(p_object, id, e, &vps, cur_line);
+               sym = yasm_symtab_declare(p_symtab, id, YASM_SYM_COMMON,
+                                         cur_line);
+               yasm_symrec_set_common_size(sym, e);
+               yasm_symrec_set_objext_valparams(sym, extvps);
 
-               yasm_vps_delete(&vps);
                yasm_xfree(id);
            } else {
-               yasm_objfmt_common_declare(p_object, id, e, NULL, cur_line);
+               sym = yasm_symtab_declare(p_symtab, id, YASM_SYM_COMMON,
+                                         cur_line);
+               yasm_symrec_set_common_size(sym, e);
                yasm_xfree(id);
            }
            return NULL;
        }
-       case DIR_EXTERN:
-           get_next_token(); /* DIR_EXTERN */
-           if (!expect(ID)) return NULL;
-           /* Go ahead and do it, even though all undef become extern */
-           yasm_objfmt_extern_declare(p_object, ID_val, NULL, cur_line);
-           yasm_xfree(ID_val);
-           get_next_token(); /* ID */
-           return NULL;
-       case DIR_WEAK:
-           get_next_token(); /* DIR_EXTERN */
-           if (!expect(ID)) return NULL;
-
-           yasm_vps_initialize(&vps);
-           vp = yasm_vp_create(ID_val, NULL);
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* ID */
-
-           yasm_objfmt_directive(p_object, "weak", &vps, NULL, cur_line);
-
-           yasm_vps_delete(&vps);
-           return NULL;
 
        /* Integer data definition directives */
        case DIR_ASCII:
@@ -620,13 +600,6 @@ parse_line(yasm_parser_gas *parser_gas)
        }
 
        /* Other directives */
-       case DIR_IDENT:
-           get_next_token(); /* DIR_IDENT */
-           if (!parse_dirstrvals(parser_gas, &vps))
-               return NULL;
-           yasm_objfmt_directive(p_object, "ident", &vps, NULL, cur_line);
-           yasm_vps_delete(&vps);
-           return NULL;
        case DIR_FILE:
            get_next_token(); /* DIR_FILE */
            if (curtok == STRING) {
@@ -662,7 +635,8 @@ parse_line(yasm_parser_gas *parser_gas)
                vp = yasm_vp_create(filename, NULL);
                yasm_vps_append(&vps, vp);
 
-               yasm_dbgfmt_directive(p_object, "file", &vps, cur_line);
+               yasm_object_directive(p_object, ".file", "gas", &vps, NULL,
+                                     cur_line);
 
                yasm_vps_delete(&vps);
                return NULL;
@@ -685,104 +659,8 @@ parse_line(yasm_parser_gas *parser_gas)
            yasm_vps_append(&vps, vp);
            get_next_token(); /* STRING */
 
-           yasm_dbgfmt_directive(p_object, "file", &vps, cur_line);
-
-           yasm_vps_delete(&vps);
-           return NULL;
-       case DIR_LOC:
-           /* INTNUM INTNUM INTNUM */
-           get_next_token(); /* DIR_LOC */
-           yasm_vps_initialize(&vps);
-
-           if (!expect(INTNUM)) return NULL;
-           vp = yasm_vp_create(NULL,
-                               p_expr_new_ident(yasm_expr_int(INTNUM_val)));
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* INTNUM */
-
-           if (!expect(INTNUM)) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           vp = yasm_vp_create(NULL,
-                               p_expr_new_ident(yasm_expr_int(INTNUM_val)));
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* INTNUM */
-
-           if (!expect(INTNUM)) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           vp = yasm_vp_create(NULL,
-                               p_expr_new_ident(yasm_expr_int(INTNUM_val)));
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* INTNUM */
-
-           yasm_dbgfmt_directive(p_object, "loc", &vps, cur_line);
-
-           yasm_vps_delete(&vps);
-           return NULL;
-       case DIR_TYPE:
-           /* ID ',' '@' ID */
-           get_next_token(); /* DIR_TYPE */
-           yasm_vps_initialize(&vps);
-
-           if (!expect(ID)) return NULL;
-           vp = yasm_vp_create(ID_val, NULL);
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* ID */
-
-           if (!expect(',')) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           get_next_token(); /* ',' */
-
-           if (!expect('@')) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           get_next_token(); /* '@' */
-
-           if (!expect(ID)) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           vp = yasm_vp_create(ID_val, NULL);
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* ID */
-
-           yasm_objfmt_directive(p_object, "type", &vps, NULL, cur_line);
-
-           yasm_vps_delete(&vps);
-           return NULL;
-       case DIR_SIZE:
-           /* ID ',' expr */
-           get_next_token(); /* DIR_SIZE */
-           yasm_vps_initialize(&vps);
-
-           if (!expect(ID)) return NULL;
-           vp = yasm_vp_create(ID_val, NULL);
-           yasm_vps_append(&vps, vp);
-           get_next_token(); /* ID */
-
-           if (!expect(',')) {
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           get_next_token(); /* ',' */
-
-           e = parse_expr(parser_gas);
-           if (!e) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("expression expected for `.size'"));
-               yasm_vps_delete(&vps);
-               return NULL;
-           }
-           vp = yasm_vp_create(NULL, e);
-           yasm_vps_append(&vps, vp);
-
-           yasm_objfmt_directive(p_object, "size", &vps, NULL, cur_line);
+           yasm_object_directive(p_object, ".file", "gas", &vps, NULL,
+                                 cur_line);
 
            yasm_vps_delete(&vps);
            return NULL;
@@ -862,46 +740,46 @@ parse_instr(yasm_parser_gas *parser_gas)
 
 static int
 parse_dirvals(yasm_parser_gas *parser_gas, yasm_valparamhead *vps)
-{
-    yasm_expr *e;
-    yasm_valparam *vp;
-    int num = 0;
-
-    yasm_vps_initialize(vps);
-
-    for (;;) {
-       e = parse_expr(parser_gas);
-       vp = yasm_vp_create(NULL, e);
-       yasm_vps_append(vps, vp);
-       num++;
-       if (curtok != ',')
-           break;
-       get_next_token(); /* ',' */
-    }
-    return num;
-}
-
-static int
-parse_dirstrvals(yasm_parser_gas *parser_gas, yasm_valparamhead *vps)
 {
     yasm_valparam *vp;
+    yasm_expr *e;
     int num = 0;
 
     yasm_vps_initialize(vps);
 
     for (;;) {
-       if (!expect(STRING)) {
-           yasm_vps_delete(vps);
-           yasm_vps_initialize(vps);
-           return 0;
+       switch (curtok) {
+           case ID:
+               get_peek_token(parser_gas);
+               if (parser_gas->peek_token == ',' ||
+                   is_eol_tok(parser_gas->peek_token)) {
+                   /* Just an ID */
+                   vp = yasm_vp_create(ID_val, NULL);
+                   get_next_token(); /* ID */
+               } else {
+                   e = parse_expr(parser_gas);
+                   vp = yasm_vp_create(NULL, e);
+               }
+               break;
+           case STRING:
+               vp = yasm_vp_create(STRING_val.contents, NULL);
+               get_next_token(); /* STRING */
+               break;
+           case '@':
+               /* XXX: is throwing it away *really* the right thing? */
+               get_next_token(); /* @ */
+               continue;
+           default:
+               e = parse_expr(parser_gas);
+               if (!e)
+                   return num;
+               vp = yasm_vp_create(NULL, e);
+               break;
        }
-       vp = yasm_vp_create(STRING_val.contents, NULL);
        yasm_vps_append(vps, vp);
-       get_next_token(); /* STRING */
        num++;
-       if (curtok != ',')
-           break;
-       get_next_token(); /* ',' */
+       if (curtok == ',')
+           get_next_token(); /* ',' */
     }
     return num;
 }
index 71b293f2446bc28b020df209937d3baa19c4709c..b966168956d02d882dca226706d5e226eb19c255 100644 (file)
@@ -54,25 +54,18 @@ enum tokentype {
     DIR_COMM,
     DIR_DATA,
     DIR_ENDR,
-    DIR_EXTERN,
     DIR_EQU,
     DIR_FILE,
     DIR_FILL,
-    DIR_GLOBAL,
-    DIR_IDENT,
     DIR_LEB128,
     DIR_LINE,
-    DIR_LOC,
     DIR_LOCAL,
     DIR_LCOMM,
     DIR_ORG,
     DIR_REPT,
     DIR_SECTION,
     DIR_SECTNAME,
-    DIR_SIZE,
     DIR_SKIP,
-    DIR_TYPE,
-    DIR_WEAK,
     DIR_ZERO,
     NONE
 };
index b1742bd5a6f26c3116bbb07c11b22b545d39e32a..52b331c3ecda4e6f87c577c77be1df5ffc4e0c28 100644 (file)
@@ -362,12 +362,8 @@ scan:
        '.org'          { parser_gas->state = INSTDIR; RETURN(DIR_ORG); }
        /*  data visibility directives */
        '.local'        { parser_gas->state = INSTDIR; RETURN(DIR_LOCAL); }
-       '.global'       { parser_gas->state = INSTDIR; RETURN(DIR_GLOBAL); }
-       '.globl'        { parser_gas->state = INSTDIR; RETURN(DIR_GLOBAL); }
        '.comm'         { parser_gas->state = INSTDIR; RETURN(DIR_COMM); }
        '.lcomm'        { parser_gas->state = INSTDIR; RETURN(DIR_LCOMM); }
-       '.extern'       { parser_gas->state = INSTDIR; RETURN(DIR_EXTERN); }
-       '.weak'         { parser_gas->state = INSTDIR; RETURN(DIR_WEAK); }
        /*  integer data declaration directives */
        '.byte'         {
            lvalp->int_info = 1;
@@ -486,26 +482,10 @@ scan:
        '.fill'         { parser_gas->state = INSTDIR; RETURN(DIR_FILL); }
        '.zero'         { parser_gas->state = INSTDIR; RETURN(DIR_ZERO); }
        /* other directives */
-       '.code16'       {
-           yasm_arch_set_var(p_object->arch, "mode_bits", 16);
-           goto scan;
-       }
-       '.code32'       {
-           yasm_arch_set_var(p_object->arch, "mode_bits", 32);
-           goto scan;
-       }
-       '.code64'       {
-           yasm_arch_set_var(p_object->arch, "mode_bits", 64);
-           goto scan;
-       }
        '.equ'          { parser_gas->state = INSTDIR; RETURN(DIR_EQU); }
        '.file'         { parser_gas->state = INSTDIR; RETURN(DIR_FILE); }
-       '.ident'        { parser_gas->state = INSTDIR; RETURN(DIR_IDENT); }
        '.line'         { parser_gas->state = INSTDIR; RETURN(DIR_LINE); }
-       '.loc'          { parser_gas->state = INSTDIR; RETURN(DIR_LOC); }
        '.set'          { parser_gas->state = INSTDIR; RETURN(DIR_EQU); }
-       '.size'         { parser_gas->state = INSTDIR; RETURN(DIR_SIZE); }
-       '.type'         { parser_gas->state = INSTDIR; RETURN(DIR_TYPE); }
 
        /* label or maybe directive */
        [_.][a-zA-Z0-9_$.]* {
index 7d4d7d35fdef327a2a59e0f8a01efaa2e36ad4bc..ab2625e92fa7792c15d707963cd4fcac32b88901 100644 (file)
@@ -1074,98 +1074,22 @@ fix_directive_symrec(yasm_expr__item *ei, void *d)
 }
 
 static void
-dir_extern(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-          yasm_valparamhead *objext_valparams)
+dir_absolute(yasm_object *object, yasm_valparamhead *valparams,
+            yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_valparam *vp = yasm_vps_first(valparams);
-    yasm_objfmt_extern_declare(p_object, vp->val, objext_valparams, cur_line);
-}
-
-static void
-dir_global(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-          yasm_valparamhead *objext_valparams)
-{
-    yasm_valparam *vp = yasm_vps_first(valparams);
-    yasm_objfmt_global_declare(p_object, vp->val, objext_valparams, cur_line);
-}
-
-static void
-dir_common(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-          yasm_valparamhead *objext_valparams)
-{
-    yasm_valparam *vp = yasm_vps_first(valparams);
-    yasm_valparam *vp2 = yasm_vps_next(vp);
-    unsigned long line = cur_line;
-
-    if (!vp2 || (!vp2->val && !vp2->param)) {
-       yasm_error_set(YASM_ERROR_SYNTAX,
-                      N_("no size specified in %s declaration"), "COMMON");
-       return;
-    }
-    if (vp2->val) {
-       yasm_objfmt_common_declare(p_object, vp->val,
-           p_expr_new_ident(yasm_expr_sym(
-               yasm_symtab_use(p_symtab, vp2->val, line))),
-           objext_valparams, line);
-    } else if (vp2->param) {
-       yasm_objfmt_common_declare(p_object, vp->val, vp2->param,
-                                  objext_valparams, line);
-       vp2->param = NULL;
-    }
-}
+    yasm_expr *start = yasm_vp_expr(vp, object->symtab, line);
 
-static void
-dir_section(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-           yasm_valparamhead *objext_valparams)
-{
-    yasm_section *new_section =
-       yasm_objfmt_section_switch(p_object, valparams, objext_valparams,
-                                  cur_line);
-    if (new_section) {
-       cursect = new_section;
-       parser_nasm->prev_bc = yasm_section_bcs_last(new_section);
-    } else
-       yasm_error_set(YASM_ERROR_SYNTAX, N_("invalid argument to [%s]"),
-                      "SECTION");
+    object->cur_section = yasm_object_create_absolute(object, start, line);
 }
 
 static void
-dir_absolute(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-            yasm_valparamhead *objext_valparams)
+dir_align(yasm_object *object, yasm_valparamhead *valparams,
+         yasm_valparamhead *objext_valparams, unsigned long line)
 {
     yasm_valparam *vp = yasm_vps_first(valparams);
-    unsigned long line = cur_line;
-    /* it can be just an ID or a complete expression, so handle both. */
-    if (vp->val)
-       cursect =
-           yasm_object_create_absolute(p_object,
-               p_expr_new_ident(yasm_expr_sym(
-                   yasm_symtab_use(p_symtab, vp->val, line))), line);
-    else if (vp->param) {
-       cursect =
-           yasm_object_create_absolute(p_object, vp->param, line);
-       vp->param = NULL;
-    }
-    parser_nasm->prev_bc = yasm_section_bcs_last(cursect);
-}
-
-static void
-dir_align(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-         yasm_valparamhead *objext_valparams)
-{
-    /*@only@*/ yasm_expr *boundval;
+    yasm_expr *boundval = yasm_vp_expr(vp, object->symtab, line);
     /*@depedent@*/ yasm_intnum *boundintn;
-    yasm_valparam *vp = yasm_vps_first(valparams);
-
-    /* it can be just an ID or a complete expression, so handle both. */
-    vp = yasm_vps_first(valparams);
-    if (vp->val)
-       boundval = p_expr_new_ident(yasm_expr_sym(
-           yasm_symtab_use(p_symtab, vp->val, cur_line)));
-    else if (vp->param) {
-       boundval = vp->param;
-       vp->param = NULL;
-    }
 
     /* Largest .align in the section specifies section alignment.
      * Note: this doesn't match NASM behavior, but is a lot more
@@ -1177,43 +1101,19 @@ dir_align(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
 
        /* Alignments must be a power of two. */
        if (is_exp2(boundint)) {
-           if (boundint > yasm_section_get_align(cursect))
-               yasm_section_set_align(cursect, boundint, cur_line);
+           if (boundint > yasm_section_get_align(object->cur_section))
+               yasm_section_set_align(object->cur_section, boundint, line);
        }
     }
 
     /* As this directive is called only when nop is used as fill, always
      * use arch (nop) fill.
      */
-    parser_nasm->prev_bc =
-       yasm_section_bcs_append(cursect,
-           yasm_bc_create_align(boundval, NULL, NULL,
-               /*yasm_section_is_code(cursect) ?*/
-                   yasm_arch_get_fill(p_object->arch)/* : NULL*/,
-               cur_line));
-}
-
-static void
-dir_cpu(yasm_parser_nasm *parser_nasm, yasm_valparamhead *valparams,
-       yasm_valparamhead *objext_valparams)
-{
-    yasm_valparam *vp;
-    yasm_vps_foreach(vp, valparams) {
-       if (vp->val)
-           yasm_arch_parse_cpu(p_object->arch, vp->val, strlen(vp->val));
-       else if (vp->param) {
-           const yasm_intnum *intcpu;
-           intcpu = yasm_expr_get_intnum(&vp->param, 0);
-           if (!intcpu)
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("invalid argument to [%s]"), "CPU");
-           else {
-               char strcpu[16];
-               sprintf(strcpu, "%lu", yasm_intnum_get_uint(intcpu));
-               yasm_arch_parse_cpu(p_object->arch, strcpu, strlen(strcpu));
-           }
-       }
-    }
+    yasm_section_bcs_append(object->cur_section,
+       yasm_bc_create_align(boundval, NULL, NULL,
+           /*yasm_section_is_code(object->cur_section) ?*/
+           yasm_arch_get_fill(object->arch)/* : NULL*/,
+           line));
 }
 
 static void
@@ -1221,57 +1121,21 @@ nasm_parser_directive(yasm_parser_nasm *parser_nasm, const char *name,
                      yasm_valparamhead *valparams,
                      yasm_valparamhead *objext_valparams)
 {
-    yasm_valparam *vp;
     unsigned long line = cur_line;
-    static const struct {
-       const char *name;
-       unsigned int required_arg:1;
-       unsigned int id_only:1;
-       void (*func) (yasm_parser_nasm *, yasm_valparamhead *,
-                     yasm_valparamhead *);
-    } dirs[] = {
-       {"EXTERN", 1, 1, dir_extern},
-       {"GLOBAL", 1, 1, dir_global},
-       {"COMMON", 1, 1, dir_common},
-       {"SECTION", 1, 0, dir_section},
-       {"SEGMENT", 1, 0, dir_section},
-       {"ABSOLUTE", 1, 0, dir_absolute},
-       {"ALIGN", 1, 0, dir_align},
-       {"CPU", 1, 0, dir_cpu}
-    };
-    size_t i;
-
-    /* Handle (mostly) output-format independent directives here */
-    for (i=0; i<NELEMS(dirs); i++) {
-       if (yasm__strcasecmp(name, dirs[i].name) == 0) {
-           if (dirs[i].required_arg && !valparams) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("[%s] requires an argument"), dirs[i].name);
-               break;
-           }
-           if (dirs[i].id_only && (vp = yasm_vps_first(valparams))
-               && !vp->val) {
-               yasm_error_set(YASM_ERROR_SYNTAX,
-                              N_("invalid argument to [%s]"), dirs[i].name);
-               break;
-           }
-           dirs[i].func(parser_nasm, valparams, objext_valparams);
-           break;
-       }
-    }
 
-    if (i != NELEMS(dirs)) {
-       ;
-    } else if (!yasm_arch_parse_directive(p_object->arch, name, valparams,
-                                         objext_valparams, p_object, line)) {
-       ;
-    } else if (!yasm_dbgfmt_directive(p_object, name, valparams, line)) {
+    if (!yasm_object_directive(p_object, name, "nasm", valparams,
+                              objext_valparams, line))
        ;
-    } else if (yasm_objfmt_directive(p_object, name, valparams,
-                                    objext_valparams, line)) {
-       yasm_error_set(YASM_ERROR_SYNTAX, N_("unrecognized directive [%s]"),
+    else if (strcasecmp(name, "absolute") == 0)
+       dir_absolute(p_object, valparams, objext_valparams, line);
+    else if (strcasecmp(name, "align") == 0)
+       dir_align(p_object, valparams, objext_valparams, line);
+    else
+       yasm_error_set(YASM_ERROR_SYNTAX, N_("unrecognized directive `%s'"),
                       name);
-    }
+
+    /* In case cursect changed or a bytecode was added, update prev_bc. */
+    parser_nasm->prev_bc = yasm_section_bcs_last(cursect);
 
     if (valparams)
        yasm_vps_delete(valparams);