Index: common/include/prop/prop_array.h
===================================================================
RCS file: /cvsroot/src/common/include/prop/prop_array.h,v
retrieving revision 1.5
diff -d -p -u -u -r1.5 prop_array.h
--- common/include/prop/prop_array.h 16 Aug 2007 16:28:17 -0000 1.5
+++ common/include/prop/prop_array.h 27 Oct 2007 15:47:14 -0000
@@ -66,9 +66,15 @@ void prop_array_remove(prop_array_t, un
bool prop_array_equals(prop_array_t, prop_array_t);
-char * prop_array_externalize(prop_array_t);
-prop_array_t prop_array_internalize(const char *);
+char *prop_array_externalize(prop_array_t);
+prop_array_t prop_array_internalize(const uint8_t *, size_t);
+bool prop_array_externalize_with_encoding(prop_array_t, uint8_t **,
+ size_t *,
+ prop_encoding_t);
+bool prop_array_externalize_to_file_with_encoding(prop_array_t,
+ const char *,
+ prop_encoding_t);
bool prop_array_externalize_to_file(prop_array_t, const char *);
prop_array_t prop_array_internalize_from_file(const char *);
Index: common/include/prop/prop_dictionary.h
===================================================================
RCS file: /cvsroot/src/common/include/prop/prop_dictionary.h,v
retrieving revision 1.7
diff -d -p -u -u -r1.7 prop_dictionary.h
--- common/include/prop/prop_dictionary.h 16 Aug 2007 16:28:17 -0000 1.7
+++ common/include/prop/prop_dictionary.h 27 Oct 2007 15:47:14 -0000
@@ -77,9 +77,17 @@ void prop_dictionary_remove_keysym(prop
bool prop_dictionary_equals(prop_dictionary_t, prop_dictionary_t);
-char * prop_dictionary_externalize(prop_dictionary_t);
-prop_dictionary_t prop_dictionary_internalize(const char *);
+prop_dictionary_t prop_dictionary_internalize(const uint8_t *, size_t);
+char *prop_dictionary_externalize(prop_dictionary_t);
+bool prop_dictionary_externalize_with_encoding(prop_dictionary_t,
+ uint8_t **,
+ size_t *,
+ prop_encoding_t);
+bool prop_dictionary_externalize_to_file_with_encoding(
+ prop_dictionary_t,
+ const char *,
+ prop_encoding_t);
bool prop_dictionary_externalize_to_file(prop_dictionary_t,
const char *);
prop_dictionary_t prop_dictionary_internalize_from_file(const char *);
Index: common/include/prop/prop_number.h
===================================================================
RCS file: /cvsroot/src/common/include/prop/prop_number.h,v
retrieving revision 1.5
diff -d -p -u -u -r1.5 prop_number.h
--- common/include/prop/prop_number.h 16 Aug 2007 16:28:17 -0000 1.5
+++ common/include/prop/prop_number.h 27 Oct 2007 15:47:14 -0000
@@ -58,6 +58,7 @@ bool prop_number_unsigned(prop_number_t
int64_t prop_number_integer_value(prop_number_t);
uint64_t prop_number_unsigned_integer_value(prop_number_t);
+int prop_number_compare(prop_number_t, prop_number_t);
bool prop_number_equals(prop_number_t, prop_number_t);
bool prop_number_equals_integer(prop_number_t, int64_t);
bool prop_number_equals_unsigned_integer(prop_number_t, uint64_t);
Index: common/include/prop/prop_object.h
===================================================================
RCS file: /cvsroot/src/common/include/prop/prop_object.h,v
retrieving revision 1.6
diff -d -p -u -u -r1.6 prop_object.h
--- common/include/prop/prop_object.h 30 Aug 2007 12:23:53 -0000 1.6
+++ common/include/prop/prop_object.h 27 Oct 2007 15:47:14 -0000
@@ -58,6 +58,12 @@ typedef enum {
PROP_TYPE_DICT_KEYSYM = 0x646b6579 /* 'dkey' */
} prop_type_t;
+typedef enum {
+ PROP_ENCODING_DEFAULT = 0,
+ PROP_ENCODING_XML = 1,
+ PROP_ENCODING_BINARY = 2
+} prop_encoding_t;
+
__BEGIN_DECLS
void prop_object_retain(prop_object_t);
void prop_object_release(prop_object_t);
Index: common/lib/libprop/Makefile.inc
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/Makefile.inc,v
retrieving revision 1.6
diff -d -p -u -u -r1.6 Makefile.inc
--- common/lib/libprop/Makefile.inc 16 Aug 2007 21:44:06 -0000 1.6
+++ common/lib/libprop/Makefile.inc 27 Oct 2007 15:47:14 -0000
@@ -2,7 +2,7 @@
.PATH: ${.PARSEDIR}
-SRCS+= prop_array.c prop_bool.c prop_data.c prop_dictionary.c \
+SRCS+= prop_array.c prop_bool.c prop_bplist.c prop_data.c prop_dictionary.c \
prop_dictionary_util.c prop_ingest.c prop_kern.c prop_number.c \
prop_object.c prop_stack.c prop_string.c
Index: common/lib/libprop/prop_array.3
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_array.3,v
retrieving revision 1.5
diff -d -p -u -u -r1.5 prop_array.3
--- common/lib/libprop/prop_array.3 16 Aug 2007 16:30:59 -0000 1.5
+++ common/lib/libprop/prop_array.3 27 Oct 2007 15:47:14 -0000
@@ -54,8 +54,10 @@
.Nm prop_array_add ,
.Nm prop_array_remove ,
.Nm prop_array_externalize ,
+.Nm prop_array_externalize_with_encoding ,
.Nm prop_array_internalize ,
.Nm prop_array_externalize_to_file ,
+.Nm prop_array_externalize_to_file_with_encoding ,
.Nm prop_array_internalize_from_file ,
.Nm prop_array_equals
.Nd array property collection object
@@ -101,7 +103,14 @@
.Ft char *
.Fn prop_array_externalize "prop_array_t array"
.Ft prop_array_t
-.Fn prop_array_internalize "const char *xml"
+.Fn prop_array_internalize "const uint8_t *buf" "size_t len"
+.\"
+.Ft bool
+.Fn prop_array_externalize_with_encoding "prop_array_t array" \
+ "uint8_t **bufp" "size_t *lenp" "prop_encoding_t enc"
+.Ft bool
+.Fn prop_array_externalize_to_file_with_encoding "prop_array_t array" \
+ "const char *path" "prop_encoding_t enc"
.\"
.Ft bool
.Fn prop_array_externalize_to_file "prop_array_t array" "const char *path"
@@ -222,16 +231,31 @@ In the kernel, the buffer is allocated u
.Xr malloc 9
using the malloc type
.Dv M_TEMP .
-.It Fn prop_array_internalize "const char *xml"
-Parse the XML representation of a property list in the NUL-terminated
-buffer
-.Fa xml
-and return the corresponding array.
+.It Fn prop_array_externalize_with_encoding "prop_array_t array" \
+ "uint8_t **bufp" "size_t *lenp" "prop_encoding_t enc"
+Externalizes an array using encoding
+.Fa enc .
+On success returns
+.Dv true
+and fills buffer address and length to
+.Fa bufp
+and
+.Fa lenp
+respectively. On failure,
+.Dv false
+is returned and no arguments are modified.
+.It Fn prop_array_internalize "const uint8_t *buf" "size_t len"
+Parse any supported encoding of a property list in the buffer
+.Fa buf
+of length
+.Fa len
+bytes and return the corresponding array.
Returns
.Dv NULL
if parsing fails for any reason.
.It Fn prop_array_externalize_to_file "prop_array_t array" "const char *path"
-Externalizes an array and writes it to the file specified by
+Externalizes an array in default encoding and writes it to the file specified
+by
.Fa path .
The file is saved with the mode
.Dv 0666
@@ -241,10 +265,19 @@ and is written atomically.
Returns
.Dv false
if externalizing or writing the array fails for any reason.
+.It Fn prop_array_externalize_to_file_with_encoding "prop_array_t array" \
+ "const char *path" "prop_encoding_t enc"
+Like
+.Xr prop_array_externalize_to_file 3
+but use encoding
+.Fa enc .
.It Fn prop_array_internalize_from_file "const char *path"
-Reads the XML property list contained in the file specified by
-.Fa path ,
-internalizes it, and returns the corresponding array.
+Reads the property list contained in the file specified by
+.Fa path
+regardless of its encoding, internalizes it, and returns the corresponding
+array. Should reading or parsing fail for any reason,
+.Dv NULL
+is returned.
.El
.Sh SEE ALSO
.Xr prop_bool 3 ,
Index: common/lib/libprop/prop_array.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_array.c,v
retrieving revision 1.11
diff -d -p -u -u -r1.11 prop_array.c
--- common/lib/libprop/prop_array.c 30 Aug 2007 12:23:54 -0000 1.11
+++ common/lib/libprop/prop_array.c 27 Oct 2007 15:47:14 -0000
@@ -91,6 +91,28 @@ struct _prop_array_iterator {
#define EXPAND_STEP 16
+void
+_prop_array_rdlock(prop_object_t po)
+{
+#if !defined(_STANDALONE)
+ prop_array_t pa = po;
+
+ _PROP_ASSERT(prop_object_is_array(pa));
+ _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
+#endif
+}
+
+void
+_prop_array_unlock(prop_object_t po)
+{
+#if !defined(_STANDALONE)
+ prop_array_t pa = po;
+
+ _PROP_ASSERT(prop_object_is_array(pa));
+ _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
+#endif
+}
+
static int
_prop_array_free(prop_stack_t stack, prop_object_t *obj)
{
@@ -702,21 +724,14 @@ prop_array_equals(prop_array_t array1, p
return (prop_object_equals(array1, array2));
}
-/*
- * prop_array_externalize --
- * Externalize an array, return a NUL-terminated buffer
- * containing the XML-style representation. The buffer is allocated
- * with the M_TEMP memory type.
- */
-char *
-prop_array_externalize(prop_array_t pa)
+static bool
+_prop_array_xml_externalize(prop_array_t pa, uint8_t **bufp, size_t *lenp)
{
struct _prop_object_externalize_context *ctx;
- char *cp;
ctx = _prop_object_externalize_context_alloc();
if (ctx == NULL)
- return (NULL);
+ return (false);
if (_prop_object_externalize_header(ctx) == false ||
(*pa->pa_obj.po_type->pot_extern)(ctx, pa) == false ||
@@ -724,13 +739,61 @@ prop_array_externalize(prop_array_t pa)
/* We are responsible for releasing the buffer. */
_PROP_FREE(ctx->poec_buf, M_TEMP);
_prop_object_externalize_context_free(ctx);
- return (NULL);
+ return (false);
}
- cp = ctx->poec_buf;
+ *bufp = (uint8_t *)ctx->poec_buf;
+ *lenp = ctx->poec_len;
_prop_object_externalize_context_free(ctx);
- return (cp);
+ return (true);
+}
+
+/*
+ * prop_array_externalize --
+ * Like prop_array_externalize_with_encoding() below, using XML.
+ */
+char *
+prop_array_externalize(prop_array_t pa)
+{
+ uint8_t *buf;
+ size_t len;
+
+ if (! prop_array_externalize_with_encoding(pa, &buf, &len,
+ PROP_ENCODING_XML))
+ return (NULL);
+
+ return ((char *)buf);
+}
+
+/*
+ * prop_array_externalize_with_encoding --
+ * Externalize an array in given encoding, on success return true
+ * and set buffer pointer and length arguments; otherwise return
+ * false and don't fill any values. The buffer is allocated with
+ * the M_TEMP memory type.
+ */
+bool
+prop_array_externalize_with_encoding(prop_array_t pa, uint8_t **bufp,
+ size_t *lenp, prop_encoding_t enc)
+{
+ _PROP_ASSERT(bufp != NULL && lenp != NULL);
+
+ if (! prop_object_is_array(pa))
+ return (false);
+
+ switch (enc) {
+ case PROP_ENCODING_BINARY:
+ return (_prop_bp_externalize_object(pa, PROP_TYPE_ARRAY, bufp,
+ lenp));
+
+ case PROP_ENCODING_DEFAULT:
+ case PROP_ENCODING_XML:
+ return (_prop_array_xml_externalize(pa, bufp, lenp));
+ }
+
+ /* LINTED silly gcc */
+ return (false);
}
/*
@@ -829,30 +892,54 @@ _prop_array_internalize_body(prop_stack_
* Create an array by parsing the XML-style representation.
*/
prop_array_t
-prop_array_internalize(const char *xml)
+prop_array_internalize(const uint8_t *buf, size_t len)
{
- return _prop_generic_internalize(xml, "array");
+ _PROP_ASSERT(buf != NULL && len > 0);
+
+ switch (buf[0]) {
+ case 'b':
+ return (_prop_bp_internalize(buf, len, PROP_TYPE_ARRAY));
+ case '<':
+ return (_prop_generic_internalize((const char *)buf, "array"));
+ }
+
+ return (NULL);
}
#if !defined(_KERNEL) && !defined(_STANDALONE)
/*
* prop_array_externalize_to_file --
- * Externalize an array to the specified file.
+ * Externalize an array to the specified file in XML format.
*/
bool
prop_array_externalize_to_file(prop_array_t array, const char *fname)
{
- char *xml;
+ return (prop_array_externalize_to_file_with_encoding(array,
+ fname, PROP_ENCODING_DEFAULT));
+}
+
+/*
+ * prop_array_externalize_to_file_with_encoding --
+ * Externalize an array to the specified file in XML format.
+ */
+bool
+prop_array_externalize_to_file_with_encoding(prop_array_t array,
+ const char *fname, prop_encoding_t enc)
+{
+ uint8_t *buf;
+ size_t len;
bool rv;
int save_errno = 0; /* XXXGCC -Wuninitialized [mips, ...] */
- xml = prop_array_externalize(array);
- if (xml == NULL)
+ if (! prop_array_externalize_with_encoding(array, &buf, &len, enc)) {
+ errno = EINVAL;
return (false);
- rv = _prop_object_externalize_write_file(fname, xml, strlen(xml));
+ }
+
+ rv = _prop_object_externalize_write_file(fname, buf, len);
if (rv == false)
save_errno = errno;
- _PROP_FREE(xml, M_TEMP);
+ _PROP_FREE(buf, M_TEMP);
if (rv == false)
errno = save_errno;
@@ -872,7 +959,8 @@ prop_array_internalize_from_file(const c
mf = _prop_object_internalize_map_file(fname);
if (mf == NULL)
return (NULL);
- array = prop_array_internalize(mf->poimf_xml);
+
+ array = prop_array_internalize(mf->poimf_data, mf->poimf_datasize);
_prop_object_internalize_unmap_file(mf);
return (array);
Index: common/lib/libprop/prop_bplist.c
===================================================================
RCS file: common/lib/libprop/prop_bplist.c
diff -N common/lib/libprop/prop_bplist.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ common/lib/libprop/prop_bplist.c 27 Oct 2007 15:47:15 -0000
@@ -0,0 +1,1810 @@
+/* $NetBSD$ */
+
+/*-
+ * Copyright (c) 2007 Jachym Holecek <
[email protected]>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * XXXfreza TODO:
+ * o Don't allocate internalizer context on the stack
+ * o Tidy _prop_bp_decode_object() a bit, it's too long
+ * o Look at using joerg's stack management
+ *
+ * XXXfreza CAVEATS:
+ * o Mutating internalized objects is risky as objects may be arbitrarily
+ * uniquified, depending on the encoder.
+ */
+
+#include <sys/queue.h>
+
+#include <prop/proplib.h>
+#include "prop_object_impl.h"
+#include "prop_rb_impl.h"
+
+#if defined(_KERNEL) || defined(_STANDALONE)
+#include <machine/limits.h>
+#else
+#include <limits.h>
+#endif
+
+/* Round 'x' up to the nearest multiple of 'm'. */
+#define _PROP_ROUNDUP(x, m) ((((x) + ((m) - 1))/(m)) * (m))
+
+/* General size/count increments. */
+#define BPLIST_INCREMENT_SMALL 16 /* > BPLIST_HEADER_LEN */
+#define BPLIST_INCREMENT_LARGE 128
+
+/* Maximum length of encoded integer (marker byte + 64bit value). */
+#define BPLIST_NUMBER_MAXLEN 9
+
+/*
+ * (1) Header structure. Identifies file format and version.
+ */
+
+/* Magic marker & lenght (no terminating NUL). */
+#define BPLIST_MAGIC "bplist"
+#define BPLIST_MAGIC_LEN 6
+
+/* Version is given in two bytes interpreted as ASCII characters. */
+#define BPLIST_VERSION_LEN 2
+#define BPLIST_VERSION_MAJOR_OFFS 6
+#define BPLIST_VERSION_MINOR_OFFS 7
+
+/* Total header length. */
+#define BPLIST_HEADER_LEN (BPLIST_MAGIC_LEN + BPLIST_VERSION_LEN)
+
+/*
+ * (2) Object table. Flat array describing all objects in the plist.
+ * Compound objects (array, dict) refer to their "children" via
+ * indexes to the offset table.
+ */
+
+/* Object type encoded in higher four bits. */
+#define BPLIST_TYPE_MULTI 0x00
+#define BPLIST_TYPE_UINT 0x10 /* signed int in Apple */
+#define BPLIST_TYPE_REAL 0x20 /* unsupported */
+#define BPLIST_TYPE_DATE 0x30 /* unsupported */
+#define BPLIST_TYPE_DATA 0x40
+#define BPLIST_TYPE_ASCII 0x50 /* ASCII string */
+#define BPLIST_TYPE_UNICODE 0x60 /* unsupported */
+#define BPLIST_TYPE_SINT 0x70 /* reserved in Apple */
+#define BPLIST_TYPE_UID 0x80 /* unsupported */
+#define BPLIST_TYPE_ARRAY 0xa0
+#define BPLIST_TYPE_DICT 0xd0
+
+/* Lower four bits for BPLIST_TYPE_MULTI. */
+#define BPLIST_MULTI_NULL 0x00
+#define BPLIST_MULTI_FALSE 0x08
+#define BPLIST_MULTI_TRUE 0x09
+#define BPLIST_MULTI_FILL 0x0f
+
+/* Where lower bits mean "count", this indicates (u_)integer count follows. */
+#define BPLIST_COUNT_MANY 0x0f
+
+/*
+ * (3) Offset table. Array of unsigned integers (width defined by the
+ * trailer) resolving object references to file offsets at which
+ * objects are stored.
+ */
+
+/*
+ * (4) Trailer structure. Defines byte-width of offset table entries, its
+ * offset in the file, count of offset table entries (ie. object count)
+ * and index of the toplevel array/dict.
+ */
+
+#define BPLIST_TRAILER_LEN (3*8 + 2)
+#define BPLIST_TRAILER_OFFWIDTH_OFFS 0
+#define BPLIST_TRAILER_REFWIDTH_OFFS 1
+#define BPLIST_TRAILER_OBJCNT_OFFS 2
+#define BPLIST_TRAILER_OBJTOP_OFFS 10
+#define BPLIST_TRAILER_OFFTAB_OFFS 18
+
+/*
+ * Internalizer data types.
+ */
+
+typedef struct _prop_bp_intern_frame *_prop_bp_intern_frame_t;
+typedef struct _prop_bp_intern *_prop_bp_intern_t;
+
+/* Internalizer frame, common for arrays/dicts. */
+struct _prop_bp_intern_frame {
+ prop_object_t if_container;
+ const char *if_keysym; /* Dictionary only */
+ const uint8_t *if_buffer;
+ u_int if_count; /* Object count */
+ u_int if_index; /* Current object */
+};
+
+struct _prop_bp_intern {
+ /* Trailer members. */
+ u_int bi_offtab_width; /* size 1 offset 0 */
+ u_int bi_objref_width; /* size 1 offset 1 */
+ u_int bi_object_count; /* size 8 offset 2 */
+ u_int bi_object_first; /* size 8 offset 10 */
+ u_int bi_offtab_offset; /* size 8 offset 18 */
+
+ /* Objects internalized so far, by index. */
+ prop_object_t *bi_objects;
+
+ /* Utility members. */
+ const uint8_t *bi_offtab;
+ const uint8_t *bi_buffer;
+ size_t bi_length;
+
+ /* Manipulated exclusively by _prop_bp_intern_stack_*(). */
+ u_int bi_stack_depth;
+ u_int bi_stack_top;
+ _prop_bp_intern_frame_t bi_stack; /* array */
+};
+
+/*
+ * Externalizer data types.
+ */
+
+typedef struct _prop_bp_extern *_prop_bp_extern_t;
+typedef struct _prop_bp_node *_prop_bp_object_t;
+typedef struct _prop_bp_table *_prop_bp_table_t;
+typedef struct _prop_bp_uniq_node *_prop_bp_uniq_node_t;
+typedef struct _prop_bp_uniq_list *_prop_bp_uniq_list_t;
+typedef union _prop_bp_uniq_value *_prop_bp_uniq_value_t;
+
+/* Entry in uniqified object table. */
+struct _prop_bp_node {
+ prop_object_t bo_object;
+ u_int *bo_reftab; /* compounds */
+ u_int bo_index;
+ u_int bo_offset;
+};
+
+/* Uniquified RB-tree string/integer value. */
+union _prop_bp_uniq_value {
+ struct {
+ const char *bsv_string;
+ uint32_t bsv_hash;
+ } bv__string;
+ prop_number_t bv_number;
+};
+
+#define bv_string bv__string.bsv_string
+#define bv_hash bv__string.bsv_hash
+
+/* Entry in uniquified string/integer RB-tree. */
+struct _prop_bp_uniq_node {
+ struct rb_node bu_rb; /* must be head */
+ SLIST_ENTRY(_prop_bp_uniq_node) bu_link;
+ union _prop_bp_uniq_value bu_value;
+ u_int bu_index;
+ u_int bu_offset;
+};
+
+#define _PROP_UNCONST(a) \
+ ((void *)(unsigned long)(const void *)(a))
+
+/* Unique node/value accessors and conversions. */
+#define BPLIST_UNODE_TO_VALUE(node) \
+ (&((_prop_bp_uniq_node_t)_PROP_UNCONST(node))->bu_value)
+
+#define BPLIST_UNODE_TO_INDEX(node) \
+ (((_prop_bp_uniq_node_t)(void *)node)->bu_index)
+
+#define BPLIST_VOIDP_TO_VALUE(ptr) \
+ ((_prop_bp_uniq_value_t)_PROP_UNCONST(ptr))
+
+SLIST_HEAD(_prop_bp_uniq_list, _prop_bp_uniq_node);
+
+/* Uniquified object table. */
+struct _prop_bp_table {
+ _prop_bp_object_t bt_objects; /* array */
+ u_int bt_depth;
+ u_int bt_next;
+};
+
+/* Uniquified object tables & their count. */
+#define BPLIST_TABLE_COMPOUND 0 /* dict & array */
+#define BPLIST_TABLE_SINGLE 1 /* bool & data */
+#define BPLIST_TABLE_COUNT 2 /* number of tables */
+
+struct _prop_bp_extern {
+ /* Uniquified compounds (only empty collections unique). */
+ struct _prop_bp_table ec_compounds;
+ u_int ec_empty_array;
+ u_int ec_empty_dict;
+
+ /* Uniquified booleans and data (only booleans unique). */
+ struct _prop_bp_table ec_others;
+ u_int ec_true;
+ u_int ec_false;
+
+ /* Uniquified string RB-tree. */
+ struct _prop_bp_uniq_list ec_str_list;
+ struct rb_tree ec_str_tree;
+
+ /* Uniquified numer RB-tree. */
+ struct _prop_bp_uniq_list ec_num_list;
+ struct rb_tree ec_num_tree;
+
+ /* Externalized plist. */
+ uint8_t *ec_extern_buffer;
+ size_t ec_extern_size;
+ size_t ec_extern_next;
+
+ /* Unique object count (and next object index). */
+ u_int ec_index_next;
+
+ /* Trailer values. */
+ u_int ec_objref_width;
+ u_int ec_offtab_width;
+ u_int ec_offtab_start;
+};
+
+/*
+ * Internalizer stack management.
+ */
+
+static bool
+_prop_bp_intern_stack_init(_prop_bp_intern_t ic)
+{
+ u_int count = BPLIST_INCREMENT_SMALL;
+ u_int size = (count * sizeof(struct _prop_bp_intern_frame));
+
+ ic->bi_stack = _PROP_MALLOC(size, M_TEMP);
+ if (ic->bi_stack == NULL)
+ return (false);
+
+ ic->bi_stack_depth = count;
+ ic->bi_stack_top = 0;
+
+ return (true);
+}
+
+static void
+_prop_bp_intern_stack_free(_prop_bp_intern_t ic)
+{
+ /* We're done, WIP objects themselves freed via bi_objects[]. */
+ _PROP_FREE(ic->bi_stack, M_TEMP);
+}
+
+static _prop_bp_intern_frame_t
+_prop_bp_intern_stack_peek(_prop_bp_intern_t ic)
+{
+ return (&ic->bi_stack[ic->bi_stack_top]);
+}
+
+static _prop_bp_intern_frame_t
+_prop_bp_intern_stack_zerohead(_prop_bp_intern_t ic)
+{
+ _prop_bp_intern_frame_t bif = _prop_bp_intern_stack_peek(ic);
+
+ return (memset(bif, 0, sizeof(struct _prop_bp_intern_frame)));
+}
+
+static bool
+_prop_bp_intern_stack_pop(_prop_bp_intern_t ic)
+{
+ if (ic->bi_stack_top == 1)
+ return (true);
+
+ ic->bi_stack_top -= 1;
+ return (false);
+}
+
+static _prop_bp_intern_frame_t
+_prop_bp_intern_stack_push(_prop_bp_intern_t ic)
+{
+ size_t size;
+ u_int count;
+ void *p;
+
+ /* XXXfreza this leaves stack frame 0 wasted. */
+ ic->bi_stack_top += 1;
+ if (ic->bi_stack_top < ic->bi_stack_depth)
+ return (_prop_bp_intern_stack_zerohead(ic));
+
+ count = (ic->bi_stack_depth + BPLIST_INCREMENT_SMALL);
+ size = (count * sizeof(struct _prop_bp_intern_frame));
+ p = _PROP_REALLOC(ic->bi_stack, size, M_TEMP);
+ if (p == NULL)
+ return (NULL);
+
+ ic->bi_stack_depth = count;
+ ic->bi_stack = p;
+
+ return (_prop_bp_intern_stack_zerohead(ic));
+}
+
+/*
+ * Internalizer utility decoders.
+ */
+
+static const uint8_t *
+_prop_bp_object_pointer(_prop_bp_intern_t ic, u_int n)
+{
+ const uint8_t *ofp = (ic->bi_offtab + n*ic->bi_offtab_width);
+ u_int offset = 0;
+ int i;
+
+ for (i = 0; i < ic->bi_offtab_width; i++)
+ offset = (offset << 8) | ofp[i];
+
+ if (offset >= (ic->bi_length - BPLIST_TRAILER_LEN))
+ return (NULL);
+
+ return (ic->bi_buffer + offset);
+}
+
+static const uint8_t *
+_prop_bp_read_int(_prop_bp_intern_t ic, const uint8_t *obj, u_int *valp)
+{
+ uint8_t hi = (*obj & 0xf0);
+ uint8_t lo = (*obj & 0x0f);
+ u_int nbytes;
+ u_int i;
+
+ /* Check type and calculate number size in bytes. */
+ if (hi != BPLIST_TYPE_UINT)
+ return (NULL);
+
+ nbytes = (1 << lo);
+ if (nbytes > sizeof(u_int))
+ return (NULL);
+
+ /* Careful not to overflow object table. */
+ if ((obj + nbytes) > ic->bi_offtab)
+ return (NULL);
+ obj += 1;
+
+ /* Shift in big-endian value. */
+ for (*valp = 0, i = 0; i < nbytes; i++)
+ *valp = (*valp << 8) | *obj++;
+
+ return (obj);
+}
+
+static const uint8_t *
+_prop_bp_read_index(_prop_bp_intern_t ic, const uint8_t *obj, u_int *valp)
+{
+ u_int i;
+
+ /* Careful not to overflow object table. */
+ if ((obj + ic->bi_objref_width) > ic->bi_offtab)
+ return (NULL);
+
+ /* Shift in big-endian value. */
+ for (*valp = 0, i = 0; i < ic->bi_objref_width; i++)
+ *valp = (*valp << 8) | *obj++;
+
+ /* Careful not to overflow advised object count. */
+ if (*valp >= ic->bi_object_count)
+ return (NULL);
+
+ return (obj);
+}
+
+/*
+ * Internalizer object decoder routines.
+ */
+
+/*ARGSUSED*/
+static prop_number_t
+_prop_bp_decode_int(_prop_bp_intern_t ic, const uint8_t *obj, bool isuint,
+ uint8_t lo)
+{
+ uint64_t val = 0;
+ u_int nbytes = (1 << lo);
+ u_int i;
+
+ if (nbytes > 8)
+ return (NULL);
+
+ for (i = 0; i < nbytes; i++)
+ val = (val << 8) | *obj++;
+
+ if (isuint)
+ return (prop_number_create_unsigned_integer(val));
+ else
+ return (prop_number_create_integer((int64_t)val));
+}
+
+static prop_array_t
+_prop_bp_decode_array(_prop_bp_intern_t ic, const uint8_t *obj, uint8_t lo)
+{
+ _prop_bp_intern_frame_t bif;
+ prop_array_t pa;
+ u_int nelts;
+
+ /* Read array size (number of contained objects). */
+ if (lo == BPLIST_COUNT_MANY) {
+ obj = _prop_bp_read_int(ic, obj, &nelts);
+ if (obj == NULL)
+ return (NULL);
+ } else
+ nelts = lo;
+
+ /* Create the array. */
+ pa = prop_array_create_with_capacity(nelts);
+ if (pa == NULL)
+ return (NULL);
+
+ /* Initialize stack frame. */
+ bif = _prop_bp_intern_stack_push(ic);
+ if (bif == NULL) {
+ prop_object_release(pa);
+ return (NULL);
+ }
+ bif->if_container = pa;
+ bif->if_buffer = obj;
+ bif->if_count = nelts;
+ bif->if_index = 0;
+
+ return (pa);
+}
+
+static prop_dictionary_t
+_prop_bp_decode_dict(_prop_bp_intern_t ic, const uint8_t *obj, uint8_t lo)
+{
+ _prop_bp_intern_frame_t bif;
+ prop_dictionary_t pd;
+ u_int nelts;
+
+ /* Read dictionary size (number of <key, val> pairs). */
+ if (lo == BPLIST_COUNT_MANY) {
+ obj = _prop_bp_read_int(ic, obj, &nelts);
+ if (obj == NULL)
+ return (NULL);
+ } else
+ nelts = lo;
+
+ /* Create the dictionary. */
+ pd = prop_dictionary_create_with_capacity(nelts);
+ if (pd == NULL)
+ return (NULL);
+
+ /* Initialize stack frame. */
+ bif = _prop_bp_intern_stack_push(ic);
+ if (bif == NULL) {
+ prop_object_release(pd);
+ return (NULL);
+ }
+ bif->if_container = pd;
+ bif->if_keysym = NULL;
+ bif->if_buffer = obj;
+ bif->if_count = (2 * nelts);
+ bif->if_index = 0;
+
+ return (pd);
+}
+
+static prop_string_t
+_prop_bp_decode_ascii(_prop_bp_intern_t ic, const uint8_t *obj, uint8_t lo)
+{
+ prop_string_t ps;
+ u_int size;
+ char *str;
+
+ /* Read string length. */
+ if (lo == BPLIST_COUNT_MANY) {
+ obj = _prop_bp_read_int(ic, obj, &size);
+ if (obj == NULL)
+ return (NULL);
+ } else
+ size = lo;
+
+ /* Are we in bounds of the object table? */
+ if ((obj + size) > ic->bi_offtab)
+ return (NULL);
+
+ str = _PROP_MALLOC(size + 1, M_TEMP);
+ if (str == NULL)
+ return (NULL);
+
+ str[size] = '\0';
+ memcpy(str, obj, size);
+
+ /* XXXfreza this is expensive but we can't donate a buffer to ps */
+ ps = prop_string_create_cstring(str);
+ _PROP_FREE(str, M_TEMP);
+
+ return (ps);
+}
+
+static prop_data_t
+_prop_bp_decode_data(_prop_bp_intern_t ic, const uint8_t *obj, uint8_t lo)
+{
+ u_int size;
+
+ /* Read data length. */
+ if (lo == BPLIST_COUNT_MANY) {
+ obj = _prop_bp_read_int(ic, obj, &size);
+ if (obj == NULL)
+ return (NULL);
+ } else
+ size = lo;
+
+ /* Are we in bounds of the object table? */
+ if ((obj + size) > ic->bi_offtab)
+ return (NULL);
+
+ return (prop_data_create_data(obj, size));
+}
+
+static bool
+_prop_bp_decode_object(_prop_bp_intern_t ic, u_int idx)
+{
+ _prop_bp_intern_frame_t bif;
+ prop_object_t po;
+ const uint8_t *obj;
+ uint8_t hi;
+ uint8_t lo;
+
+ if (! _prop_bp_intern_stack_init(ic))
+ return (false);
+
+ nextobj:
+ /* See if we already have this object, decode otherwise. */
+ po = ic->bi_objects[idx];
+ if (po != NULL)
+ goto gotobj;
+
+ /* Get pointer to encoded object and see what we can do. */
+ obj = _prop_bp_object_pointer(ic, idx);
+ if (obj == NULL)
+ goto fail;
+
+ hi = (*obj & 0xf0); /* Object type tag */
+ lo = (*obj & 0x0f); /* Auxiliary data */
+ obj += 1;
+
+ switch (hi) {
+ case BPLIST_TYPE_MULTI:
+ switch (lo) {
+ case BPLIST_MULTI_FALSE:
+ po = prop_bool_create(false);
+ break;
+
+ case BPLIST_MULTI_TRUE:
+ po = prop_bool_create(true);
+ break;
+
+ default:
+ goto fail;
+ }
+ break;
+
+ case BPLIST_TYPE_UINT:
+ po = _prop_bp_decode_int(ic, obj, true, lo);
+ break;
+
+ case BPLIST_TYPE_SINT:
+ po = _prop_bp_decode_int(ic, obj, false, lo);
+ break;
+
+ case BPLIST_TYPE_ASCII:
+ po = _prop_bp_decode_ascii(ic, obj, lo);
+ break;
+
+ case BPLIST_TYPE_DATA:
+ po = _prop_bp_decode_data(ic, obj, lo);
+ break;
+
+ case BPLIST_TYPE_ARRAY:
+ po = _prop_bp_decode_array(ic, obj, lo);
+ break;
+
+ case BPLIST_TYPE_DICT:
+ po = _prop_bp_decode_dict(ic, obj, lo);
+ break;
+
+ default:
+ goto fail;
+ }
+
+ /* See if decoding was successful, remember object if so. */
+ if (po == NULL)
+ goto fail;
+ ic->bi_objects[idx] = po;
+
+ gotobj:
+ /* Get current compound, if it's a fresh one skip insert step. */
+ bif = _prop_bp_intern_stack_peek(ic);
+ if (bif->if_container == po)
+ goto newcompound;
+
+ insertobj:
+ /* Insert object into its container. */
+ if (prop_object_type(bif->if_container) == PROP_TYPE_DICTIONARY) {
+ if (bif->if_keysym == NULL) {
+ const char *key;
+
+ if (prop_object_type(po) != PROP_TYPE_STRING)
+ goto fail;
+
+ key = prop_string_cstring_nocopy(po);
+ bif->if_keysym = key;
+ } else {
+ if (! prop_dictionary_set(bif->if_container,
+ bif->if_keysym, po))
+ goto fail;
+
+ bif->if_keysym = NULL;
+ }
+ } else
+ if (prop_object_type(bif->if_container) == PROP_TYPE_ARRAY) {
+ if (! prop_array_set(bif->if_container, bif->if_index, po))
+ goto fail;
+ }
+ bif->if_index += 1;
+
+ newcompound:
+ /* See if we've just finished current compound object. */
+ if (bif->if_index == bif->if_count) {
+ if (_prop_bp_intern_stack_pop(ic)) {
+ _prop_bp_intern_stack_free(ic);
+ return (true);
+ }
+
+ /* Restore previous context and re-run insert path. */
+ po = bif->if_container;
+ bif = _prop_bp_intern_stack_peek(ic);
+
+ goto insertobj;
+ }
+
+ /* Get index of next object to work on, re-run decoder. */
+ obj = _prop_bp_read_index(ic, bif->if_buffer, &idx);
+ if (obj == NULL)
+ goto fail;
+ bif->if_buffer = obj;
+
+ goto nextobj;
+
+ fail:
+ _prop_bp_intern_stack_free(ic);
+ return (false);
+}
+
+/*
+ * Internal API to encoding dispatcher.
+ */
+
+prop_object_t
+_prop_bp_internalize(const uint8_t *data, size_t len, prop_type_t type)
+{
+ struct _prop_bp_intern ic;
+ prop_object_t po;
+ const uint8_t *trbase;
+ const uint8_t *obj;
+ uint64_t big;
+ uint8_t val;
+ u_int i;
+
+ /* Is it large enough to make any sense? */
+ if (len <= (BPLIST_HEADER_LEN + BPLIST_TRAILER_LEN))
+ return (NULL);
+
+ /* Does it match the magic marker? */
+ if (memcmp(data, BPLIST_MAGIC, BPLIST_MAGIC_LEN) != 0)
+ return (NULL);
+
+ /* Can we parse this version? */
+ if (data[BPLIST_VERSION_MAJOR_OFFS] != 'Z' ||
+ data[BPLIST_VERSION_MINOR_OFFS] != 'Z')
+ return (NULL);
+
+ /* Decode the trailer, can't do much without it. */
+ trbase = (data + len - BPLIST_TRAILER_LEN);
+ ic.bi_offtab_width = *(trbase + BPLIST_TRAILER_OFFWIDTH_OFFS);
+ ic.bi_objref_width = *(trbase + BPLIST_TRAILER_REFWIDTH_OFFS);
+
+ big = be64dec(trbase + BPLIST_TRAILER_OFFTAB_OFFS);
+ if (big > UINT_MAX)
+ return (NULL);
+ ic.bi_offtab_offset = (u_int)big;
+
+ big = be64dec(trbase + BPLIST_TRAILER_OBJCNT_OFFS);
+ if (big > UINT_MAX)
+ return (NULL);
+ ic.bi_object_count = (u_int)big;
+
+ big = be64dec(trbase + BPLIST_TRAILER_OBJTOP_OFFS);
+ if (big > UINT_MAX)
+ return (NULL);
+ ic.bi_object_first = (u_int)big;
+
+#if 0
+ warnx("bi_offtab_width %u", ic.bi_offtab_width);
+ warnx("bi_objref_width %u", ic.bi_objref_width);
+ warnx("bi_offtab_offset 0x%x", ic.bi_offtab_offset);
+ warnx("bi_object_count %u", ic.bi_object_count);
+ warnx("bi_object_first %u", ic.bi_object_first);
+#endif
+
+ /* Sanity check the trailer. */
+ if (ic.bi_offtab_width == 0 || ic.bi_offtab_width > sizeof(u_int))
+ return (NULL);
+
+ if (ic.bi_objref_width == 0 || ic.bi_objref_width > sizeof(u_int))
+ return (NULL);
+
+ if (ic.bi_offtab_offset >= (len - BPLIST_TRAILER_LEN) ||
+ ic.bi_offtab_offset <= BPLIST_HEADER_LEN)
+ return (NULL);
+
+ if (ic.bi_object_count > (len - ic.bi_offtab_offset -
+ BPLIST_TRAILER_LEN)/ic.bi_offtab_width)
+ return (NULL);
+
+ if (ic.bi_object_first >= ic.bi_object_count)
+ return (NULL);
+
+ /* Setup remaining internalizer context. */
+ ic.bi_offtab = (data + ic.bi_offtab_offset);
+ ic.bi_buffer = data;
+ ic.bi_length = len;
+
+ /* Check toplevel object type before we waste more time. */
+ obj = _prop_bp_object_pointer(&ic, ic.bi_object_first);
+ if (obj == NULL)
+ return (NULL);
+ val = (*obj & 0xf0);
+
+ if ((type == PROP_TYPE_DICTIONARY && val != BPLIST_TYPE_DICT) ||
+ (type == PROP_TYPE_ARRAY && val != BPLIST_TYPE_ARRAY))
+ return (NULL);
+
+ /* Initialize object table. */
+ ic.bi_objects = _PROP_MALLOC(sizeof(prop_object_t) *
+ ic.bi_object_count, M_TEMP);
+ if (ic.bi_objects == NULL)
+ return (NULL);
+ memset(ic.bi_objects, 0, sizeof(prop_object_t) * ic.bi_object_count);
+
+ /* Parse toplevel object. */
+ if (_prop_bp_decode_object(&ic, ic.bi_object_first))
+ po = ic.bi_objects[ic.bi_object_first];
+ else
+ po = NULL;
+
+ /* Release initial object references, except for toplevel one. */
+ for (i = 0; i < ic.bi_object_count; i++)
+ if (ic.bi_objects[i] != NULL && i != ic.bi_object_first)
+ prop_object_release(ic.bi_objects[i]);
+
+ _PROP_FREE(ic.bi_objects, M_TEMP);
+ return (po);
+}
+
+/*
+ * Externalizer RB-tree comparison routines.
+ */
+
+static int
+_prop_rb_str_compare_key(const struct rb_node *node, const void *key)
+{
+ const _prop_bp_uniq_value_t uv1 = BPLIST_UNODE_TO_VALUE(node);
+ const _prop_bp_uniq_value_t uv2 = BPLIST_VOIDP_TO_VALUE(key);
+
+ if (uv1->bv_hash > uv2->bv_hash)
+ return (1);
+ else
+ if (uv1->bv_hash < uv2->bv_hash)
+ return (-1);
+
+ return (strcmp(uv1->bv_string, uv2->bv_string));
+}
+
+static int
+_prop_rb_str_compare_node(const struct rb_node *node1,
+ const struct rb_node *node2)
+{
+ const _prop_bp_uniq_value_t uv = BPLIST_UNODE_TO_VALUE(node2);
+
+ return (_prop_rb_str_compare_key(node1, uv));
+}
+
+static const struct rb_tree_ops _prop_bp_str_rbops = {
+ .rbto_compare_nodes = _prop_rb_str_compare_node,
+ .rbto_compare_key = _prop_rb_str_compare_key,
+};
+
+static int
+_prop_rb_num_compare_key(const struct rb_node *node, const void *key)
+{
+ const _prop_bp_uniq_value_t uv1 = BPLIST_UNODE_TO_VALUE(node);
+ const _prop_bp_uniq_value_t uv2 = BPLIST_VOIDP_TO_VALUE(key);
+
+ return (prop_number_compare(uv1->bv_number, uv2->bv_number));
+}
+
+static int
+_prop_rb_num_compare_node(const struct rb_node *node1,
+ const struct rb_node *node2)
+{
+ const _prop_bp_uniq_value_t uv = BPLIST_UNODE_TO_VALUE(node2);
+
+ return (_prop_rb_num_compare_key(node1, uv));
+}
+
+static const struct rb_tree_ops _prop_bp_num_rbops = {
+ .rbto_compare_nodes = _prop_rb_num_compare_node,
+ .rbto_compare_key = _prop_rb_num_compare_key,
+};
+
+/*
+ * Externalizer utility routines.
+ */
+
+static uint8_t
+_prop_bp_number_logsize(uint64_t val)
+{
+ /* Calculate log2(number of bytes to represent value). */
+ if (val & 0xffffffff00000000ULL)
+ return (3);
+ else
+ if (val & 0x00000000ffff0000ULL)
+ return (2);
+ else
+ if (val & 0x000000000000ff00ULL)
+ return (1);
+
+ return (0);
+}
+
+static u_int
+_prop_bp_number_size(uint64_t val)
+{
+ if (val <= 0x00000000000000ffULL)
+ return (1);
+ else
+ if (val <= 0x000000000000ffffULL)
+ return (2);
+ else
+ if (val <= 0x0000000000ffffffULL)
+ return (3);
+ else
+ if (val <= 0x00000000ffffffffULL)
+ return (4);
+ else
+ if (val <= 0x000000ffffffffffULL)
+ return (5);
+ else
+ if (val <= 0x0000ffffffffffffULL)
+ return (6);
+ else
+ if (val <= 0x00ffffffffffffffULL)
+ return (7);
+
+ return (8);
+}
+
+static bool
+_prop_bp_table_init(_prop_bp_table_t tab)
+{
+ size_t size;
+
+ size = (BPLIST_INCREMENT_SMALL * sizeof(struct _prop_bp_node));
+
+ tab->bt_objects = _PROP_MALLOC(size, M_TEMP);
+ if (tab->bt_objects == NULL)
+ return (false);
+
+ tab->bt_depth = BPLIST_INCREMENT_SMALL;
+ tab->bt_next = 0;
+
+ return (true);
+}
+
+static _prop_bp_extern_t
+_prop_bp_extern_init(prop_object_t po)
+{
+ _prop_bp_extern_t be;
+
+ be = _PROP_MALLOC(sizeof(struct _prop_bp_extern), M_TEMP);
+ if (be == NULL)
+ return (NULL);
+
+ /* Initialize object tables. */
+ if (! _prop_bp_table_init(&be->ec_compounds) ||
+ ! _prop_bp_table_init(&be->ec_others))
+ goto fail;
+
+ /* Invalidate singular objects references. */
+ be->ec_empty_array = UINT_MAX;
+ be->ec_empty_dict = UINT_MAX;
+ be->ec_true = UINT_MAX;
+ be->ec_false = UINT_MAX;
+
+ /* Initialize object RB-trees and lists. */
+ _prop_rb_tree_init(&be->ec_str_tree, &_prop_bp_str_rbops);
+ _prop_rb_tree_init(&be->ec_num_tree, &_prop_bp_num_rbops);
+
+ SLIST_INIT(&be->ec_str_list);
+ SLIST_INIT(&be->ec_num_list);
+
+ /* Initialize externalize buffer. */
+ be->ec_extern_buffer = _PROP_MALLOC(BPLIST_INCREMENT_LARGE, M_TEMP);
+ if (be->ec_extern_buffer == NULL)
+ goto fail;
+
+ be->ec_extern_size = BPLIST_INCREMENT_LARGE;
+ be->ec_extern_next = 0;
+
+ /* Register toplevel compound. */
+ be->ec_compounds.bt_objects[0].bo_object = po;
+ be->ec_compounds.bt_objects[0].bo_index = 0;
+ be->ec_compounds.bt_next = 1;
+
+ /* Lock toplevel compound so that it doesn't dance under our hands. */
+ if (prop_object_type(po) == PROP_TYPE_DICTIONARY)
+ _prop_dictionary_rdlock(po);
+ else
+ _prop_array_rdlock(po);
+
+ /* Toplevel compound has index 0, continue from 1 on. */
+ be->ec_index_next = 1;
+
+ return (be);
+
+ fail:
+ if (be->ec_compounds.bt_objects != NULL)
+ _PROP_FREE(be->ec_compounds.bt_objects, M_TEMP);
+ if (be->ec_others.bt_objects != NULL)
+ _PROP_FREE(be->ec_others.bt_objects, M_TEMP);
+ if (be != NULL)
+ _PROP_FREE(be, M_TEMP);
+
+ return (NULL);
+}
+
+static void
+_prop_bp_extern_free(_prop_bp_extern_t be)
+{
+ _prop_bp_uniq_node_t unode;
+ _prop_bp_table_t comptab = &be->ec_compounds;
+ u_int i;
+
+ /* Free tables of contents for compound objects. */
+ for (i = 0; i < comptab->bt_next; i++)
+ if (comptab->bt_objects[i].bo_reftab != NULL)
+ _PROP_FREE(comptab->bt_objects[i].bo_reftab, M_TEMP);
+
+ /* Free all uniquification tables. */
+ _PROP_ASSERT(be->ec_compounds.bt_objects != NULL);
+ _PROP_FREE(be->ec_compounds.bt_objects, M_TEMP);
+
+ if (be->ec_others.bt_objects != NULL)
+ _PROP_FREE(be->ec_others.bt_objects, M_TEMP);
+
+ /* Free all uniquification lists (and thus RB nodes). */
+ while ((unode = SLIST_FIRST(&be->ec_str_list)) != NULL) {
+ SLIST_REMOVE_HEAD(&be->ec_str_list, bu_link);
+ _PROP_FREE(unode, M_TEMP);
+ }
+
+ while ((unode = SLIST_FIRST(&be->ec_num_list)) != NULL) {
+ SLIST_REMOVE_HEAD(&be->ec_num_list, bu_link);
+ _PROP_FREE(unode, M_TEMP);
+ }
+
+ /* Externalize buffer managed by caller. */
+ _PROP_FREE(be, M_TEMP);
+}
+
+static uint8_t *
+_prop_bp_ensure_capacity(_prop_bp_extern_t be, u_int size)
+{
+ uint8_t *start;
+ u_int newsize;
+ void *p;
+
+ retry:
+ if ((be->ec_extern_next + size) < be->ec_extern_size) {
+ start = &be->ec_extern_buffer[be->ec_extern_next];
+ be->ec_extern_next += size;
+
+ return (start);
+ }
+
+ newsize = (be->ec_extern_size + size);
+ newsize = _PROP_ROUNDUP(newsize, BPLIST_INCREMENT_LARGE);
+
+ /* Fail if we've gone insanely large (integer overflow). */
+ if (newsize < be->ec_extern_size)
+ return (NULL);
+
+ p = _PROP_REALLOC(be->ec_extern_buffer, newsize, M_TEMP);
+ if (p == NULL)
+ return (NULL);
+
+ be->ec_extern_buffer = p;
+ be->ec_extern_size = newsize;
+
+ /* We'll definitely make it this time. */
+ goto retry;
+}
+
+static uint32_t
+_prop_bp_hash32_string(const char *cstring)
+{
+ /* XXXfreza cut'n'paste from <sys/hash.h> */
+ const uint8_t *s = (const uint8_t *)cstring;
+ uint32_t hash = 5381;
+ uint8_t c;
+
+ while ((c = *s++) != 0)
+ hash = hash * 33 + c; /* "perl": k=33, r=r+r/32 */
+
+ return (hash + (hash >> 5));
+}
+
+/*
+ * Externalizer object uniquifying process.
+ */
+
+static u_int
+_prop_bp_put_uniq(_prop_bp_extern_t be, struct rb_tree *tree,
+ _prop_bp_uniq_list_t list, _prop_bp_uniq_value_t uvp)
+{
+ _prop_bp_uniq_node_t unode;
+ struct rb_node *node;
+
+ /* Nothing to do if it's already there. */
+ node = _prop_rb_tree_find(tree, uvp);
+ if (node != NULL)
+ return (BPLIST_UNODE_TO_INDEX(node));
+
+ /* Create and insert a new unique object. */
+ unode = _PROP_MALLOC(sizeof(struct _prop_bp_uniq_node), M_TEMP);
+ if (unode == NULL)
+ return (UINT_MAX);
+
+ unode->bu_value = (*uvp); /* struct copy */
+ unode->bu_index = (be->ec_index_next++);
+
+ _prop_rb_tree_insert_node(tree, &unode->bu_rb);
+ SLIST_INSERT_HEAD(list, unode, bu_link);
+
+ return (unode->bu_index);
+}
+
+static u_int
+_prop_bp_put_table(_prop_bp_extern_t be, _prop_bp_table_t tab,
+ prop_object_t po)
+{
+ _prop_bp_object_t bo;
+ u_int count;
+ u_int size;
+ void *p;
+
+ retry:
+ if (tab->bt_next < tab->bt_depth) {
+ bo = &tab->bt_objects[tab->bt_next];
+ bo->bo_object = po;
+ bo->bo_index = (be->ec_index_next++);
+
+ tab->bt_next += 1;
+ return (bo->bo_index);
+ }
+
+ count = (tab->bt_depth + BPLIST_INCREMENT_SMALL);
+ size = (count * sizeof(struct _prop_bp_node));
+ p = _PROP_REALLOC(tab->bt_objects, size, M_TEMP);
+ if (p == NULL)
+ return (UINT_MAX);
+
+ tab->bt_objects = p;
+ tab->bt_depth = count;
+
+ /* We'll definitely make it this time. */
+ goto retry;
+}
+
+static bool
+_prop_bp_uniquify(_prop_bp_extern_t be, _prop_bp_object_t bo,
+ prop_object_t po, u_int np)
+{
+ union _prop_bp_uniq_value uv;
+ u_int n = UINT_MAX; /* gcc */
+ bool yesno;
+ bool empty;
+
+ switch (prop_object_type(po)) {
+ case PROP_TYPE_STRING:
+ uv.bv_string = prop_string_cstring_nocopy(po);
+ uv.bv_hash = _prop_bp_hash32_string(uv.bv_string);
+
+ n = _prop_bp_put_uniq(be, &be->ec_str_tree, &be->ec_str_list,
+ &uv);
+ break;
+
+ case PROP_TYPE_DICT_KEYSYM:
+ uv.bv_string = prop_dictionary_keysym_cstring_nocopy(po);
+ uv.bv_hash = _prop_bp_hash32_string(uv.bv_string);
+
+ n = _prop_bp_put_uniq(be, &be->ec_str_tree, &be->ec_str_list,
+ &uv);
+ break;
+
+ case PROP_TYPE_NUMBER:
+ uv.bv_number = po;
+ n = _prop_bp_put_uniq(be, &be->ec_num_tree, &be->ec_num_list,
+ &uv);
+ break;
+
+ case PROP_TYPE_DICTIONARY:
+ /* Make sure dict doesn't mutate or die under our hands. */
+ _prop_dictionary_rdlock(po);
+
+ empty = (prop_dictionary_count(po) == 0);
+ if (empty && be->ec_empty_dict != UINT_MAX) {
+ n = be->ec_empty_dict;
+ break;
+ }
+
+ n = _prop_bp_put_table(be, &be->ec_compounds, po);
+ if (n == UINT_MAX)
+ _prop_dictionary_unlock(po);
+
+ if (empty)
+ be->ec_empty_dict = n;
+ break;
+
+ case PROP_TYPE_ARRAY:
+ /* Make sure array doesn't mutate or die under our hands. */
+ _prop_array_rdlock(po);
+
+ empty = (prop_array_count(po) == 0);
+ if (empty && be->ec_empty_array != UINT_MAX) {
+ n = be->ec_empty_array;
+ break;
+ }
+
+ n = _prop_bp_put_table(be, &be->ec_compounds, po);
+ if (n == UINT_MAX)
+ _prop_array_unlock(po);
+
+ if (empty)
+ be->ec_empty_array = n;
+ break;
+
+ case PROP_TYPE_BOOL:
+ yesno = prop_bool_true(po);
+
+ if (be->ec_true != UINT_MAX && yesno) {
+ n = be->ec_true;
+ break;
+ }
+ if (be->ec_false != UINT_MAX && !yesno) {
+ n = be->ec_false;
+ break;
+ }
+
+ n = _prop_bp_put_table(be, &be->ec_others, po);
+
+ if (yesno)
+ be->ec_true = n;
+ else
+ be->ec_false = n;
+ break;
+
+ case PROP_TYPE_DATA:
+ n = _prop_bp_put_table(be, &be->ec_others, po);
+ break;
+
+ case PROP_TYPE_UNKNOWN:
+ /* gcc */
+ break;
+ }
+
+ if (n == UINT_MAX)
+ return (false);
+
+ bo->bo_reftab[np] = n;
+ return (true);
+}
+
+/*
+ * Externalizer encoder utility routines.
+ */
+
+static uint8_t *
+_prop_bp_write_byte(uint8_t *obj, uint8_t val)
+{
+ *obj = val;
+
+ return (obj + 1);
+}
+
+static uint8_t *
+_prop_bp_write_number(uint8_t *obj, u_int val)
+{
+ uint8_t lo = _prop_bp_number_logsize(val);
+ int i;
+
+ /* Write object tag. */
+ obj = _prop_bp_write_byte(obj, BPLIST_TYPE_UINT | lo);
+
+ /* Write big-endian value. */
+ for (i = 8*((1 << lo) - 1); i >= 0; i -= 8)
+ obj = _prop_bp_write_byte(obj, val >> i);
+
+ return (obj);
+}
+
+static uint8_t *
+_prop_bp_write_reference(_prop_bp_extern_t be, uint8_t *obj, u_int val)
+{
+ int i;
+
+ _PROP_ASSERT(val < be->ec_index_next);
+
+ /* Write big-endian value. */
+ for (i = 8*(be->ec_objref_width - 1); i >= 0; i -= 8)
+ obj = _prop_bp_write_byte(obj, val >> i);
+
+ return (obj);
+}
+
+static void
+_prop_bp_write_offset(_prop_bp_extern_t be, uint8_t *offtab,
+ u_int idx, u_int offs)
+{
+ uint8_t *obj = (offtab + idx * be->ec_offtab_width);
+ int i;
+
+ /* Write big-endian value. */
+ for (i = 8*(be->ec_offtab_width - 1); i >= 0; i -= 8)
+ obj = _prop_bp_write_byte(obj, offs >> i);
+}
+
+static bool
+_prop_bp_write_offtab(_prop_bp_extern_t be)
+{
+ _prop_bp_uniq_node_t uo;
+ _prop_bp_object_t bo;
+ uint8_t *offtab;
+ u_int size = (be->ec_offtab_width * be->ec_index_next);
+ u_int i;
+
+ offtab = _prop_bp_ensure_capacity(be, size);
+ if (offtab == NULL)
+ return (false);
+
+ for (i = 0; i < be->ec_compounds.bt_next; i++) {
+ bo = &be->ec_compounds.bt_objects[i];
+
+ _prop_bp_write_offset(be, offtab, bo->bo_index, bo->bo_offset);
+ }
+
+ for (i = 0; i < be->ec_others.bt_next; i++) {
+ bo = &be->ec_others.bt_objects[i];
+
+ _prop_bp_write_offset(be, offtab, bo->bo_index, bo->bo_offset);
+ }
+
+ SLIST_FOREACH(uo, &be->ec_num_list, bu_link)
+ _prop_bp_write_offset(be, offtab, uo->bu_index, uo->bu_offset);
+
+ SLIST_FOREACH(uo, &be->ec_str_list, bu_link)
+ _prop_bp_write_offset(be, offtab, uo->bu_index, uo->bu_offset);
+
+ return (true);
+}
+
+static uint8_t *
+_prop_bp_write_wide(uint8_t *obj, u_int val)
+{
+ be64enc(obj, val);
+
+ return (obj + 8);
+}
+
+static bool
+_prop_bp_write_trailer(_prop_bp_extern_t be)
+{
+ uint8_t *trailer;
+
+ trailer = _prop_bp_ensure_capacity(be, BPLIST_TRAILER_LEN);
+ if (trailer == NULL)
+ return (false);
+
+ /* Write trailer, note we always have toplevel object at index 0. */
+ trailer = _prop_bp_write_byte(trailer, be->ec_offtab_width);
+ trailer = _prop_bp_write_byte(trailer, be->ec_objref_width);
+ trailer = _prop_bp_write_wide(trailer, be->ec_index_next);
+ trailer = _prop_bp_write_wide(trailer, 0);
+ trailer = _prop_bp_write_wide(trailer, be->ec_offtab_start);
+
+ return (true);
+}
+
+/*
+ * Externalize object encoders.
+ */
+
+static uint8_t *
+_prop_bp_encode_bool(_prop_bp_extern_t be, prop_bool_t pb)
+{
+ uint8_t *obj;
+
+ obj = _prop_bp_ensure_capacity(be, 1);
+ if (obj == NULL)
+ return (false);
+
+ if (prop_bool_true(pb))
+ obj = _prop_bp_write_byte(obj, BPLIST_MULTI_TRUE);
+ else
+ obj = _prop_bp_write_byte(obj, BPLIST_MULTI_FALSE);
+
+ return (obj);
+}
+
+static uint8_t *
+_prop_bp_encode_number(_prop_bp_extern_t be, _prop_bp_uniq_value_t uv)
+{
+ uint64_t big;
+ uint8_t *obj;
+ uint8_t tag;
+ uint8_t low;
+ int i;
+
+ if (prop_number_unsigned(uv->bv_number)) {
+ big = prop_number_unsigned_integer_value(uv->bv_number);
+ low = _prop_bp_number_logsize(big);
+ tag = (low | BPLIST_TYPE_UINT);
+ } else {
+ big = prop_number_integer_value(uv->bv_number);
+ low = _prop_bp_number_logsize(big);
+ tag = (low | BPLIST_TYPE_SINT);
+ }
+
+ obj = _prop_bp_ensure_capacity(be, BPLIST_NUMBER_MAXLEN);
+ if (obj == NULL)
+ return (NULL);
+
+ /* Write object tag. */
+ obj = _prop_bp_write_byte(obj, tag);
+
+ /* Write big-endian value. */
+ for (i = 8*((1 << low) - 1); i >= 0; i -= 8)
+ obj = _prop_bp_write_byte(obj, (uint8_t)(big >> i));
+
+ return (obj);
+}
+
+static uint8_t *
+_prop_bp_encode_data(_prop_bp_extern_t be, prop_data_t pd)
+{
+ uint8_t *obj;
+ size_t size = prop_data_size(pd);
+ uint8_t lo;
+
+ if (size < BPLIST_COUNT_MANY)
+ lo = size;
+ else
+ lo = BPLIST_COUNT_MANY;
+
+ obj = _prop_bp_ensure_capacity(be, 1 + BPLIST_NUMBER_MAXLEN + size);
+ if (obj == NULL)
+ return (NULL);
+
+ /* Write type tag. */
+ obj = _prop_bp_write_byte(obj, BPLIST_TYPE_DATA | lo);
+
+ /* Possibly followed by integer size. */
+ if (lo == BPLIST_COUNT_MANY)
+ obj = _prop_bp_write_number(obj, size);
+
+ /* Write byte array. */
+ memcpy(obj, prop_data_data_nocopy(pd), size);
+ return (obj + size);
+}
+
+static uint8_t *
+_prop_bp_encode_string(_prop_bp_extern_t be, _prop_bp_uniq_value_t uv)
+{
+ uint8_t *obj;
+ size_t size = strlen(uv->bv_string);
+ uint8_t lo;
+
+ if (size < BPLIST_COUNT_MANY)
+ lo = size;
+ else
+ lo = BPLIST_COUNT_MANY;
+
+ obj = _prop_bp_ensure_capacity(be, 1 + BPLIST_NUMBER_MAXLEN + size);
+ if (obj == NULL)
+ return (NULL);
+
+ /* Write type tag. */
+ obj = _prop_bp_write_byte(obj, BPLIST_TYPE_ASCII | lo);
+
+ /* Possibly followed by integer size. */
+ if (lo == BPLIST_COUNT_MANY)
+ obj = _prop_bp_write_number(obj, size);
+
+ /* Write character array. */
+ memcpy(obj, uv->bv_string, size);
+ return (obj + size);
+}
+
+static uint8_t *
+_prop_bp_encode_array(_prop_bp_extern_t be, _prop_bp_object_t bo)
+{
+ prop_array_t pa = bo->bo_object;
+ uint8_t *obj;
+ uint8_t lo;
+ u_int count;
+ u_int i;
+
+ count = prop_array_count(pa);
+ if (count < BPLIST_COUNT_MANY)
+ lo = count;
+ else
+ lo = BPLIST_COUNT_MANY;
+
+ obj = _prop_bp_ensure_capacity(be, 1 + BPLIST_NUMBER_MAXLEN +
+ count * be->ec_objref_width);
+ if (obj == NULL)
+ return (NULL);
+
+ /* Write type tag. */
+ obj = _prop_bp_write_byte(obj, BPLIST_TYPE_ARRAY | lo);
+
+ /* For empty array, we're done. */
+ if (count == 0)
+ return (obj);
+
+ /* Possibly followed by integer count. */
+ if (lo == BPLIST_COUNT_MANY)
+ obj = _prop_bp_write_number(obj, count);
+
+ /* Write object reference table. */
+ for (i = 0; i < count; i++)
+ obj = _prop_bp_write_reference(be, obj, bo->bo_reftab[i]);
+
+ return (obj);
+}
+
+static uint8_t *
+_prop_bp_encode_dict(_prop_bp_extern_t be, _prop_bp_object_t bo)
+{
+ prop_dictionary_t pd = bo->bo_object;
+ uint8_t *obj;
+ uint8_t lo;
+ u_int count;
+ u_int i;
+
+ count = prop_dictionary_count(pd);
+ if (count < BPLIST_COUNT_MANY)
+ lo = count;
+ else
+ lo = BPLIST_COUNT_MANY;
+
+ obj = _prop_bp_ensure_capacity(be, 1 + BPLIST_NUMBER_MAXLEN +
+ 2 * count * be->ec_objref_width);
+ if (obj == NULL)
+ return (NULL);
+
+ /* Write type tag. */
+ obj = _prop_bp_write_byte(obj, BPLIST_TYPE_DICT | lo);
+
+ /* For empty dictionary, we're done. */
+ if (count == 0)
+ return (obj);
+
+ /* Possibly followed by integer count. */
+ if (lo == BPLIST_COUNT_MANY)
+ obj = _prop_bp_write_number(obj, count);
+
+ /* Write out <keyref, objref> pairs. */
+ count *= 2;
+ for (i = 0; i < count; i += 2) {
+ obj = _prop_bp_write_reference(be, obj, bo->bo_reftab[i]);
+ obj = _prop_bp_write_reference(be, obj, bo->bo_reftab[i + 1]);
+ }
+
+ return (obj);
+}
+
+static bool
+_prop_bp_encode(_prop_bp_extern_t be)
+{
+ _prop_bp_uniq_node_t uo;
+ _prop_bp_object_t bo;
+ prop_object_t po;
+ uint8_t *end;
+ u_int i;
+
+ /* Encode all arrays and dicts. */
+ for (i = 0; i < be->ec_compounds.bt_next; i++) {
+ bo = &be->ec_compounds.bt_objects[i];
+
+ /* Remember offset where object starts. */
+ bo->bo_offset = be->ec_extern_next;
+
+ if (prop_object_type(bo->bo_object) == PROP_TYPE_ARRAY)
+ end = _prop_bp_encode_array(be, bo);
+ else
+ end = _prop_bp_encode_dict(be, bo);
+ if (end == NULL)
+ return (false);
+
+ /* Adjust to real encoding length. */
+ be->ec_extern_next = (end - be->ec_extern_buffer);
+ }
+
+ /* Encode all booleans and data. */
+ for (i = 0; i < be->ec_others.bt_next; i++) {
+ bo = &be->ec_others.bt_objects[i];
+ po = bo->bo_object;
+
+ /* Remember offset where object starts. */
+ bo->bo_offset = be->ec_extern_next;
+
+ if (prop_object_type(po) == PROP_TYPE_BOOL)
+ end = _prop_bp_encode_bool(be, po);
+ else
+ end = _prop_bp_encode_data(be, po);
+ if (end == NULL)
+ return (false);
+
+ /* Adjust to real encoding length. */
+ be->ec_extern_next = (end - be->ec_extern_buffer);
+ }
+
+ /* Encode all numbers. */
+ SLIST_FOREACH(uo, &be->ec_num_list, bu_link) {
+ /* Remember offset where object starts. */
+ uo->bu_offset = be->ec_extern_next;
+
+ end = _prop_bp_encode_number(be, &uo->bu_value);
+ if (end == NULL)
+ return (false);
+
+ /* Adjust to real encoding length. */
+ be->ec_extern_next = (end - be->ec_extern_buffer);
+ }
+
+ /* Encode all strings. */
+ SLIST_FOREACH(uo, &be->ec_str_list, bu_link) {
+ /* Remember offset where object starts. */
+ uo->bu_offset = be->ec_extern_next;
+
+ end = _prop_bp_encode_string(be, &uo->bu_value);
+ if (end == NULL)
+ return (false);
+
+ /* Adjust to real encoding length. */
+ be->ec_extern_next = (end - be->ec_extern_buffer);
+ }
+
+ return (true);
+}
+
+/*
+ * Externalizer toplevel routines.
+ */
+
+static void
+_prop_bp_unlock_compounds(_prop_bp_table_t compounds)
+{
+ prop_object_t compound;
+ u_int i;
+
+ /* Unlock all compounds, in reverse order (Note 'i' unsigned). */
+ for (i = compounds->bt_next; i > 0; i--) {
+ compound = compounds->bt_objects[i - 1].bo_object;
+
+ if (prop_object_type(compound) == PROP_TYPE_DICTIONARY)
+ _prop_dictionary_unlock(compound);
+ else
+ _prop_array_unlock(compound);
+ }
+}
+
+static bool
+_prop_bp_unpack_array(_prop_bp_extern_t be, _prop_bp_object_t bo,
+ prop_array_t pa)
+{
+ prop_object_iterator_t it;
+ prop_object_t po;
+ size_t size;
+ u_int count;
+ u_int j;
+
+ count = prop_array_count(pa);
+ if (count > 0) {
+ size = (count * sizeof(u_int));
+
+ bo->bo_reftab = _PROP_MALLOC(size, M_TEMP);
+ if (bo->bo_reftab == NULL)
+ return (false);
+ } else {
+ bo->bo_reftab = NULL;
+ return (true);
+ }
+
+ it = prop_array_iterator(pa);
+ if (it == NULL) {
+ _prop_array_unlock(pa);
+ return (false);
+ }
+ j = 0;
+
+ /* Register contents, possibly mutating compounds' bt_next. */
+ while ((po = prop_object_iterator_next(it)) != NULL)
+ if (! _prop_bp_uniquify(be, bo, po, j++)) {
+ prop_object_iterator_release(it);
+ _prop_array_unlock(pa);
+ return (false);
+ }
+
+ prop_object_iterator_release(it);
+ return (true);
+}
+
+static bool
+_prop_bp_unpack_dict(_prop_bp_extern_t be, _prop_bp_object_t bo,
+ prop_dictionary_t pd)
+{
+ prop_object_iterator_t it;
+ prop_object_t po;
+ size_t size;
+ u_int count;
+ u_int j;
+
+ count = (2 * prop_dictionary_count(pd));
+ if (count > 0) {
+ size = (count * sizeof(u_int));
+ bo->bo_reftab = _PROP_MALLOC(size, M_TEMP);
+ if (bo->bo_reftab == NULL)
+ return (false);
+ } else {
+ bo->bo_reftab = NULL;
+ return (true);
+ }
+
+ it = prop_dictionary_iterator(pd);
+ if (it == NULL) {
+ _prop_dictionary_unlock(pd);
+ return (false);
+ }
+ j = 0;
+
+ /* Register contents, possibly mutating compounds' bt_next. */
+ while ((po = prop_object_iterator_next(it)) != NULL) {
+ /* Store keysym at odd index. */
+ if (! _prop_bp_uniquify(be, bo, po, j++)) {
+ prop_object_iterator_release(it);
+ _prop_dictionary_unlock(pd);
+ return (false);
+ }
+
+ /* Store keysym's value at even index. */
+ po = prop_dictionary_get_keysym(pd, po);
+
+ if (! _prop_bp_uniquify(be, bo, po, j++)) {
+ prop_object_iterator_release(it);
+ _prop_dictionary_unlock(pd);
+ return (false);
+ }
+ }
+
+ prop_object_iterator_release(it);
+ return (true);
+}
+
+static bool
+_prop_bp_externalize(_prop_bp_extern_t be)
+{
+ _prop_bp_object_t bo;
+ prop_object_t po;
+ u_int i;
+ bool ok;
+
+ /* Build object tables, obtaining readlock on any compound. */
+ for (i = 0; i < be->ec_compounds.bt_next; i++) {
+ bo = &be->ec_compounds.bt_objects[i];
+ po = bo->bo_object;
+
+ if (prop_object_type(po) == PROP_TYPE_DICTIONARY) {
+ _prop_dictionary_rdlock(po);
+ ok = _prop_bp_unpack_dict(be, bo, po);
+ } else {
+ _prop_array_rdlock(po);
+ ok = _prop_bp_unpack_array(be, bo, po);
+ }
+ if (! ok) {
+ _prop_bp_unlock_compounds(&be->ec_compounds);
+ return (false);
+ }
+ }
+
+ /* Calculate object reference width. */
+ be->ec_objref_width = _prop_bp_number_size(be->ec_index_next);
+
+ /* Encode header. */
+ memcpy(be->ec_extern_buffer, "bplistZZ", BPLIST_HEADER_LEN);
+ be->ec_extern_next = BPLIST_HEADER_LEN;
+
+ _PROP_ASSERT(be);
+ /* Encode object table, fills object offsets. */
+ if (! _prop_bp_encode(be)) {
+ _prop_bp_unlock_compounds(&be->ec_compounds);
+ return (false);
+ }
+
+ /* We won't touch objects any more, release locks. */
+ _prop_bp_unlock_compounds(&be->ec_compounds);
+
+ /* Calculate offset table width. */
+ be->ec_offtab_width = _prop_bp_number_size(be->ec_extern_next);
+
+ /* Emit offset table. */
+ be->ec_offtab_start = be->ec_extern_next;
+
+ if (! _prop_bp_write_offtab(be))
+ return (false);
+
+ /* Emit trailer structure. */
+ if (! _prop_bp_write_trailer(be))
+ return (false);
+
+ return (true);
+}
+
+/*
+ * Internal API to encoding dispatcher.
+ */
+
+bool
+_prop_bp_externalize_object(prop_object_t po, prop_type_t type, uint8_t **dp,
+ size_t *lp)
+{
+ _prop_bp_extern_t be;
+ bool rv;
+
+ if (prop_object_type(po) != type || dp == NULL || lp == NULL)
+ return (false);
+
+ be = _prop_bp_extern_init(po);
+ if (be == NULL)
+ return (false);
+
+ rv = _prop_bp_externalize(be);
+ if (rv) {
+ *dp = be->ec_extern_buffer;
+ *lp = be->ec_extern_next;
+ } else {
+ _PROP_FREE(be->ec_extern_buffer, M_TEMP);
+ }
+
+ _prop_bp_extern_free(be);
+ return (rv);
+}
Index: common/lib/libprop/prop_dictionary.3
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_dictionary.3,v
retrieving revision 1.9
diff -d -p -u -u -r1.9 prop_dictionary.3
--- common/lib/libprop/prop_dictionary.3 11 Oct 2007 03:10:28 -0000 1.9
+++ common/lib/libprop/prop_dictionary.3 27 Oct 2007 15:47:15 -0000
@@ -57,8 +57,9 @@
.Nm prop_dictionary_set_keysym ,
.Nm prop_dictionary_remove_keysym ,
.Nm prop_dictionary_externalize ,
+.Nm prop_dictionary_externalize_with_encoding ,
.Nm prop_dictionary_internalize ,
-.Nm prop_dictionary_externalize_to_file ,
+.Nm prop_dictionary_externalize_to_file_with_encoding ,
.Nm prop_dictionary_internalize_from_file ,
.Nm prop_dictionary_equals ,
.Nm prop_dictionary_keysym_cstring_nocopy ,
@@ -68,7 +69,6 @@
.Lb libprop
.Sh SYNOPSIS
.In prop/proplib.h
-.\"
.Ft prop_dictionary_t
.Fn prop_dictionary_create "void"
.Ft prop_dictionary_t
@@ -127,12 +127,18 @@
.\"
.Ft char *
.Fn prop_dictionary_externalize "prop_dictionary_t dict"
+.Ft bool
+.Fn prop_dictionary_externalize_with_encoding "prop_dictionary_t dict" \
+ "uint8_t **bufp" "size_t *len" "prop_encoding_t enc"
.Ft prop_dictionary_t
-.Fn prop_dictionary_internalize "const char *xml"
+.Fn prop_dictionary_internalize "const uint8_t *buf" "size_t len"
.\"
.Ft bool
.Fn prop_dictionary_externalize_to_file "prop_dictionary_t dict" \
"const char *path"
+.Ft bool
+.Fn prop_dictionary_externalize_to_file_with_encoding "prop_dictionary_t dict" \
+ "const char *path" "prop_encoding_t enc"
.Ft prop_dictionary_t
.Fn prop_dictionary_internalize_from_file "const char *path"
.\"
@@ -282,17 +288,42 @@ In the kernel, the buffer is allocated u
.Xr malloc 9
using the malloc type
.Dv M_TEMP .
-.It Fn prop_dictionary_internalize "const char *xml"
-Parse the XML representation of a property list in the NUL-terminated
-buffer
-.Fa xml
+.It Fn prop_dictionary_externalize_with_encoding "prop_dictionary_t dict" \
+ "uint8_t **bufp" "size_t *lenp" "prop_encoding_t enc"
+Externalize
+.Fa dict
+using encoding
+.Fa enc .
+Returs
+.Dv true
+on success, in which case
+.Fa bufp
+and
+.Fa lenp
+arguments are filled with buffer address and length. On failure,
+.Dv false
+is returned and arguments are not modified.
+.Pp
+In user space, the buffer is allocated using
+.Xr malloc 3 .
+In the kernel, the buffer is allocated using
+.Xr malloc 9
+using the malloc type
+.Dv M_TEMP .
+The user is responsible for freeing the buffer.
+.It Fn prop_dictionary_internalize "const uint8_t *buf" "size_t len"
+Parse any supported representation of a property list in buffer
+.Fa buf
+of length
+.Fa len
and return the corresponding dictionary.
Returns
.Dv NULL
if parsing fails for any reason.
.It Fn prop_dictionary_externalize_to_file "prop_dictionary_t dict" \
"const char *path"
-Externalizes a dictionary and writes it to the file specified by
+Externalizes a dictionary in default encoding and writes it to the file
+specified by
.Fa path .
The file is saved with the mode
.Dv 0666
@@ -302,10 +333,19 @@ and is written atomically.
Returns
.Dv false
if externalizing or writing the dictionary fails for any reason.
+.It Fn prop_dictionary_externalize_to_file_with_encoding \
+ "prop_dictionary_t dict" "const char *path" "prop_encoding_t enc"
+Like
+.Xr prop_dictionary_externalize_to_file 3
+but uses encoding
+.Fa enc .
.It Fn prop_dictionary_internalize_from_file "const char *path"
-Reads the XML property list contained in the file specified by
+Reads any supported encoding of property list contained in the file specified
+by
.Fa path ,
-internalizes it, and returns the corresponding array.
+internalizes it, and returns the corresponding dictionary. Returns
+.Dv NULL
+if reading or parsing fails for any reason.
.El
.Sh SEE ALSO
.Xr prop_array 3 ,
Index: common/lib/libprop/prop_dictionary.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_dictionary.c,v
retrieving revision 1.20
diff -d -p -u -u -r1.20 prop_dictionary.c
--- common/lib/libprop/prop_dictionary.c 30 Aug 2007 12:23:54 -0000 1.20
+++ common/lib/libprop/prop_dictionary.c 27 Oct 2007 15:47:16 -0000
@@ -158,6 +158,28 @@ struct _prop_dictionary_iterator {
unsigned int pdi_index;
};
+void
+_prop_dictionary_rdlock(prop_object_t po)
+{
+#if !defined(_STANDALONE)
+ prop_dictionary_t pd = po;
+
+ _PROP_ASSERT(prop_object_is_dictionary(pd));
+ _PROP_RWLOCK_RDLOCK(pd->pd_rwlock);
+#endif
+}
+
+void
+_prop_dictionary_unlock(prop_object_t po)
+{
+#if !defined(_STANDALONE)
+ prop_dictionary_t pd = po;
+
+ _PROP_ASSERT(prop_object_is_dictionary(pd));
+ _PROP_RWLOCK_UNLOCK(pd->pd_rwlock);
+#endif
+}
+
/*
* Dictionary key symbols are immutable, and we are likely to have many
* duplicated key symbols. So, to save memory, we unique'ify key symbols
@@ -1100,21 +1122,15 @@ prop_dictionary_keysym_equals(prop_dicti
return (prop_object_equals(pdk1, pdk2));
}
-/*
- * prop_dictionary_externalize --
- * Externalize a dictionary, returning a NUL-terminated buffer
- * containing the XML-style representation. The buffer is allocated
- * with the M_TEMP memory type.
- */
-char *
-prop_dictionary_externalize(prop_dictionary_t pd)
+static bool
+_prop_dictionary_xml_externalize(prop_dictionary_t pd, uint8_t **bufp,
+ size_t *lenp)
{
struct _prop_object_externalize_context *ctx;
- char *cp;
ctx = _prop_object_externalize_context_alloc();
if (ctx == NULL)
- return (NULL);
+ return (false);
if (_prop_object_externalize_header(ctx) == false ||
(*pd->pd_obj.po_type->pot_extern)(ctx, pd) == false ||
@@ -1122,13 +1138,61 @@ prop_dictionary_externalize(prop_diction
/* We are responsible for releasing the buffer. */
_PROP_FREE(ctx->poec_buf, M_TEMP);
_prop_object_externalize_context_free(ctx);
- return (NULL);
+ return (false);
}
- cp = ctx->poec_buf;
+ *bufp = (uint8_t *)ctx->poec_buf;
+ *lenp = ctx->poec_len;
_prop_object_externalize_context_free(ctx);
- return (cp);
+ return (true);
+}
+
+/*
+ * prop_dictionary_externalize --
+ * Like prop_dictionary_externalize_with_encoding(), using XML.
+ */
+char *
+prop_dictionary_externalize(prop_dictionary_t pd)
+{
+ uint8_t *buf;
+ size_t len;
+
+ if (! prop_dictionary_externalize_with_encoding(pd, &buf, &len,
+ PROP_ENCODING_XML))
+ return (NULL);
+
+ return ((char *)buf);
+}
+
+/*
+ * prop_dictionary_externalize_with_encoding --
+ * Externalize a dictionary, on success return true and fill buffer
+ * pointer and length arguments; on failure return false and don't
+ * modify arguments. The buffer is allocated with the M_TEMP memory
+ * type.
+ */
+bool
+prop_dictionary_externalize_with_encoding(prop_dictionary_t pd, uint8_t **bufp,
+ size_t *lenp, prop_encoding_t enc)
+{
+ _PROP_ASSERT(bufp != NULL && lenp != NULL);
+
+ if (! prop_object_is_dictionary(pd))
+ return (false);
+
+ switch (enc) {
+ case PROP_ENCODING_BINARY:
+ return (_prop_bp_externalize_object(pd, PROP_TYPE_DICTIONARY,
+ bufp, lenp));
+
+ case PROP_ENCODING_DEFAULT:
+ case PROP_ENCODING_XML:
+ return (_prop_dictionary_xml_externalize(pd, bufp, lenp));
+ }
+
+ /* LINTED silly gcc */
+ return (false);
}
/*
@@ -1267,40 +1331,62 @@ _prop_dictionary_internalize_body(prop_s
/*
* prop_dictionary_internalize --
- * Create a dictionary by parsing the NUL-terminated XML-style
- * representation.
+ * Create a dictionary by decoding any supported representation.
*/
prop_dictionary_t
-prop_dictionary_internalize(const char *xml)
+prop_dictionary_internalize(const uint8_t *buf, size_t len)
{
- return _prop_generic_internalize(xml, "dict");
+ _PROP_ASSERT(buf != NULL && len > 0);
+
+ switch (buf[0]) {
+ case '<':
+ return (_prop_generic_internalize((const char *)buf, "dict"));
+
+ case 'b':
+ return (_prop_bp_internalize(buf, len, PROP_TYPE_DICTIONARY));
+ }
+
+ return (NULL);
}
#if !defined(_KERNEL) && !defined(_STANDALONE)
+bool
+prop_dictionary_externalize_to_file(prop_dictionary_t dict, const char *fname)
+{
+ return (prop_dictionary_externalize_to_file_with_encoding(dict,
+ fname, PROP_ENCODING_DEFAULT));
+}
+
/*
* prop_dictionary_externalize_to_file --
- * Externalize a dictionary to the specified file.
+ * Externalize a dictionary to the specified file in XML format.
*/
bool
-prop_dictionary_externalize_to_file(prop_dictionary_t dict, const char *fname)
+prop_dictionary_externalize_to_file_with_encoding(prop_dictionary_t dict,
+ const char *fname, prop_encoding_t enc)
{
- char *xml;
+ uint8_t *buf;
+ size_t len;
bool rv;
int save_errno = 0; /* XXXGCC -Wuninitialized [mips, ...] */
- xml = prop_dictionary_externalize(dict);
- if (xml == NULL)
+ if (! prop_dictionary_externalize_with_encoding(dict, &buf, &len,
+ enc)) {
+ errno = EINVAL;
return (false);
- rv = _prop_object_externalize_write_file(fname, xml, strlen(xml));
+ }
+
+ rv = _prop_object_externalize_write_file(fname, buf, len);
if (rv == false)
save_errno = errno;
- _PROP_FREE(xml, M_TEMP);
+ _PROP_FREE(buf, M_TEMP);
if (rv == false)
errno = save_errno;
return (rv);
}
+
/*
* prop_dictionary_internalize_from_file --
* Internalize a dictionary from a file.
@@ -1314,7 +1400,8 @@ prop_dictionary_internalize_from_file(co
mf = _prop_object_internalize_map_file(fname);
if (mf == NULL)
return (NULL);
- dict = prop_dictionary_internalize(mf->poimf_xml);
+
+ dict = prop_dictionary_internalize(mf->poimf_data, mf->poimf_datasize);
_prop_object_internalize_unmap_file(mf);
return (dict);
Index: common/lib/libprop/prop_kern.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_kern.c,v
retrieving revision 1.8
diff -d -p -u -u -r1.8 prop_kern.c
--- common/lib/libprop/prop_kern.c 16 Aug 2007 21:44:07 -0000 1.8
+++ common/lib/libprop/prop_kern.c 27 Oct 2007 15:47:16 -0000
@@ -125,13 +125,13 @@ _prop_object_unpack_pref(const struct pl
prop_object_t *objp)
{
prop_object_t obj = NULL;
- char *buf;
+ uint8_t *buf;
int error = 0;
if (pref->pref_len == 0) {
/*
- * This should never happen; we should always get the XML
- * for an empty dictionary if it's really empty.
+ * This should never happen; even empty objects encode
+ * on nonzero bytes.
*/
error = EIO;
goto out;
@@ -140,10 +140,10 @@ _prop_object_unpack_pref(const struct pl
buf[pref->pref_len - 1] = '\0'; /* extra insurance */
switch (type) {
case PROP_TYPE_DICTIONARY:
- obj = prop_dictionary_internalize(buf);
+ obj = prop_dictionary_internalize(buf, pref->pref_len);
break;
case PROP_TYPE_ARRAY:
- obj = prop_array_internalize(buf);
+ obj = prop_array_internalize(buf, pref->pref_len);
break;
default:
error = ENOTSUP;
Index: common/lib/libprop/prop_number.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_number.c,v
retrieving revision 1.14
diff -d -p -u -u -r1.14 prop_number.c
--- common/lib/libprop/prop_number.c 30 Aug 2007 12:23:54 -0000 1.14
+++ common/lib/libprop/prop_number.c 27 Oct 2007 15:47:16 -0000
@@ -450,6 +450,20 @@ prop_number_equals(prop_number_t num1, p
}
/*
+ * prop_number_compare --
+ * Return positive value when pn1 > pn2, zero when pn1 == pn2, negative
+ * value when pn1 < pn2.
+ */
+int
+prop_number_compare(prop_number_t pn1, prop_number_t pn2)
+{
+ _PROP_ASSERT(prop_object_is_number(pn1) && prop_object_is_number(pn2));
+
+ return (_prop_number_compare_values(&pn1->pn_value, &pn2->pn_value));
+}
+
+
+/*
* prop_number_equals_integer --
* Return true if the number is equivalent to the specified integer.
*/
Index: common/lib/libprop/prop_object.3
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_object.3,v
retrieving revision 1.6
diff -d -p -u -u -r1.6 prop_object.3
--- common/lib/libprop/prop_object.3 16 Aug 2007 16:31:00 -0000 1.6
+++ common/lib/libprop/prop_object.3 27 Oct 2007 15:47:16 -0000
@@ -132,6 +132,23 @@ by the iterator
Release the iterator
.Fa iter .
.El
+.Pp
+The library supports external representations described by
+.Dv prop_encoding_t
+enumeration type:
+.Pp
+.Bl -tag -width "PROP_ENCODING_DEFAULT" -compact
+.It Dv PROP_ENCODING_XML
+XML conforming to Apple DTD. Stored in C strings.
+.It Dv PROP_ENCODING_BINARY
+Derived from Apple "bplist" format. Stored in raw byte arrays.
+.It Dv PROP_ENCODING_DEFAULT
+Any of the above depending on implementation.
+.El
+.Pp
+Refer to
+.Xr proplib 3
+for notes on encoding compatibility.
.Sh SEE ALSO
.Xr prop_array 3 ,
.Xr prop_bool 3 ,
@@ -145,3 +162,6 @@ The
.Nm proplib
property container object library first appeared in
.Nx 4.0 .
+.Pp
+Support for binary external format first appeared in
+.Nx 5.0 .
Index: common/lib/libprop/prop_object.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_object.c,v
retrieving revision 1.17
diff -d -p -u -u -r1.17 prop_object.c
--- common/lib/libprop/prop_object.c 30 Aug 2007 19:12:32 -0000 1.17
+++ common/lib/libprop/prop_object.c 27 Oct 2007 15:47:16 -0000
@@ -841,7 +841,7 @@ _prop_object_externalize_file_dirname(co
* and the mode set to 0666 modified by the caller's umask.
*/
bool
-_prop_object_externalize_write_file(const char *fname, const char *xml,
+_prop_object_externalize_write_file(const char *fname, const uint8_t *buf,
size_t len)
{
char tname[PATH_MAX];
@@ -874,7 +874,7 @@ _prop_object_externalize_write_file(cons
return (false);
}
- if (write(fd, xml, len) != (ssize_t)len)
+ if (write(fd, buf, len) != (ssize_t)len)
goto bad;
if (fsync(fd) == -1)
@@ -926,8 +926,10 @@ _prop_object_internalize_map_file(const
_PROP_FREE(mf, M_TEMP);
return (NULL);
}
+ mf->poimf_datasize = (size_t)sb.st_size;
mf->poimf_mapsize = ((size_t)sb.st_size + pgmask) & ~pgmask;
- if (mf->poimf_mapsize < sb.st_size) {
+ if (mf->poimf_mapsize < mf->poimf_datasize ||
+ mf->poimf_datasize == 0) {
(void) close(fd);
_PROP_FREE(mf, M_TEMP);
return (NULL);
@@ -941,22 +943,22 @@ _prop_object_internalize_map_file(const
if ((sb.st_size & pgmask) == 0)
need_guard = true;
- mf->poimf_xml = mmap(NULL, need_guard ? mf->poimf_mapsize + pgsize
+ mf->poimf_data = mmap(NULL, need_guard ? mf->poimf_mapsize + pgsize
: mf->poimf_mapsize,
PROT_READ, MAP_FILE|MAP_SHARED, fd, (off_t)0);
(void) close(fd);
- if (mf->poimf_xml == MAP_FAILED) {
+ if (mf->poimf_data == MAP_FAILED) {
_PROP_FREE(mf, M_TEMP);
return (NULL);
}
- (void) madvise(mf->poimf_xml, mf->poimf_mapsize, MADV_SEQUENTIAL);
+ (void) madvise(mf->poimf_data, mf->poimf_mapsize, MADV_SEQUENTIAL);
if (need_guard) {
- if (mmap(mf->poimf_xml + mf->poimf_mapsize,
+ if (mmap(mf->poimf_data + mf->poimf_mapsize,
pgsize, PROT_READ,
MAP_ANON|MAP_PRIVATE|MAP_FIXED, -1,
(off_t)0) == MAP_FAILED) {
- (void) munmap(mf->poimf_xml, mf->poimf_mapsize);
+ (void) munmap(mf->poimf_data, mf->poimf_mapsize);
_PROP_FREE(mf, M_TEMP);
return (NULL);
}
@@ -975,8 +977,8 @@ _prop_object_internalize_unmap_file(
struct _prop_object_internalize_mapped_file *mf)
{
- (void) madvise(mf->poimf_xml, mf->poimf_mapsize, MADV_DONTNEED);
- (void) munmap(mf->poimf_xml, mf->poimf_mapsize);
+ (void) madvise(mf->poimf_data, mf->poimf_mapsize, MADV_DONTNEED);
+ (void) munmap(mf->poimf_data, mf->poimf_mapsize);
_PROP_FREE(mf, M_TEMP);
}
#endif /* !_KERNEL && !_STANDALONE */
Index: common/lib/libprop/prop_object_impl.h
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_object_impl.h,v
retrieving revision 1.18
diff -d -p -u -u -r1.18 prop_object_impl.h
--- common/lib/libprop/prop_object_impl.h 30 Aug 2007 12:23:54 -0000 1.18
+++ common/lib/libprop/prop_object_impl.h 27 Oct 2007 15:47:16 -0000
@@ -45,6 +45,7 @@
#include <inttypes.h>
#endif
+#include <prop/prop_object.h>
#include "prop_stack.h"
struct _prop_object_externalize_context {
@@ -155,11 +156,12 @@ void _prop_object_internalize_context_f
struct _prop_object_internalize_context *);
#if !defined(_KERNEL) && !defined(_STANDALONE)
-bool _prop_object_externalize_write_file(const char *,
- const char *, size_t);
+bool _prop_object_externalize_write_file(const char *, const uint8_t *,
+ size_t);
struct _prop_object_internalize_mapped_file {
- char * poimf_xml;
+ uint8_t *poimf_data;
+ size_t poimf_datasize;
size_t poimf_mapsize;
};
@@ -232,6 +234,17 @@ struct _prop_object_iterator {
uint32_t pi_version;
};
+/* Private APIs published by prop_{array,dictionary}.c */
+void _prop_dictionary_rdlock(prop_object_t);
+void _prop_dictionary_unlock(prop_object_t);
+void _prop_array_rdlock(prop_object_t);
+void _prop_array_unlock(prop_object_t);
+
+/* Private APIs publised by prop_bplist.c to encoding dispatchers. */
+prop_object_t _prop_bp_internalize(const uint8_t *, size_t, prop_type_t);
+bool _prop_bp_externalize_object(prop_object_t, prop_type_t,
+ uint8_t **, size_t *);
+
#if defined(_KERNEL)
/*
@@ -395,4 +408,6 @@ void * _prop_standalone_realloc(void *,
#define _PROP_ARG_UNUSED /* delete */
#endif /* __NetBSD__ */
+#define _PROP_UNCONST(a) ((void *)(unsigned long)(const void *)(a))
+
#endif /* _PROPLIB_PROP_OBJECT_IMPL_H_ */
Index: common/lib/libprop/proplib.3
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/proplib.3,v
retrieving revision 1.4
diff -d -p -u -u -r1.4 proplib.3
--- common/lib/libprop/proplib.3 21 Jun 2007 12:02:31 -0000 1.4
+++ common/lib/libprop/proplib.3 27 Oct 2007 15:47:16 -0000
@@ -55,12 +55,14 @@ Structure is provided by the array and d
.Pp
Property lists can be passed across protection boundaries by translating
them to an external representation.
-This external representation is an XML document whose format is described
-by the following DTD:
+This external representation is either an XML document whose format is
+described by the following DTD:
.Bd -literal -offset indent
http://www.apple.com/DTDs/PropertyList-1.0.dtd
.Ed
.Pp
+or a binary format based on Apple bplist encoding.
+.Pp
Property container objects are reference counted.
When an object is created, its reference count is set to 1.
Any code that keeps a reference to an object, including the collection
@@ -142,3 +144,22 @@ in kernel, standalone, and user space en
.Nm
parser is not a real XML parser.
It is hard-coded to parse only the property list external representation.
+.Pp
+The binary encoding differs from Apple bplist format in the following
+ways:
+.Bl -bullet
+.It
+NetBSD uses type marker 0x10 for unsigned integers while in Apple format,
+which doesn't really support unsigned integers, it is used to denote signed
+integers.
+.It
+NetBSD uses type marker 0x70 for signed integers while in Apple format
+it is reserved for future use.
+.It
+NetBSD encodes dictionary contents as <keyref objref>* while Apple uses
+<keyref* objref*>.
+.El
+.Pp
+Given the above incompatibilities, NetBSD binary plists are marked as
+version 'ZZ' of the format. Apple uses version '00' as of the time of
+this writing.
Index: distrib/sets/lists/comp/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/mi,v
retrieving revision 1.1071
diff -d -p -u -u -r1.1071 mi
--- distrib/sets/lists/comp/mi 7 Oct 2007 13:38:53 -0000 1.1071
+++ distrib/sets/lists/comp/mi 27 Oct 2007 15:47:21 -0000
@@ -5710,7 +5710,9 @@
./usr/share/man/cat3/prop_array_ensure_capacity.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_equals.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_externalize.0 comp-c-catman .cat
+./usr/share/man/cat3/prop_array_externalize_with_encoding.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_externalize_to_file.0 comp-c-catman .cat
+./usr/share/man/cat3/prop_array_externalize_to_file_with_encoding.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_get.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_internalize.0 comp-c-catman .cat
./usr/share/man/cat3/prop_array_internalize_from_file.0 comp-c-catman .cat
@@ -5745,7 +5747,9 @@
./usr/share/man/cat3/prop_dictionary_ensure_capacity.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_equals.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_externalize.0 comp-c-catman .cat
+./usr/share/man/cat3/prop_dictionary_externalize_with_encoding.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_externalize_to_file.0 comp-c-catman .cat
+./usr/share/man/cat3/prop_dictionary_externalize_to_file_with_encoding.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_get.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_get_bool.0 comp-c-catman .cat
./usr/share/man/cat3/prop_dictionary_get_cstring.0 comp-c-catman .cat
@@ -10295,7 +10299,9 @@
./usr/share/man/man3/prop_array_ensure_capacity.3 comp-c-man .man
./usr/share/man/man3/prop_array_equals.3 comp-c-man .man
./usr/share/man/man3/prop_array_externalize.3 comp-c-man .man
+./usr/share/man/man3/prop_array_externalize_with_encoding.3 comp-c-man .man
./usr/share/man/man3/prop_array_externalize_to_file.3 comp-c-man .man
+./usr/share/man/man3/prop_array_externalize_to_file_with_encoding.3 comp-c-man .man
./usr/share/man/man3/prop_array_get.3 comp-c-man .man
./usr/share/man/man3/prop_array_internalize.3 comp-c-man .man
./usr/share/man/man3/prop_array_internalize_from_file.3 comp-c-man .man
@@ -10330,7 +10336,9 @@
./usr/share/man/man3/prop_dictionary_ensure_capacity.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_equals.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_externalize.3 comp-c-man .man
+./usr/share/man/man3/prop_dictionary_externalize_with_encoding.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_externalize_to_file.3 comp-c-man .man
+./usr/share/man/man3/prop_dictionary_externalize_to_file_with_encoding.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_get.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_get_bool.3 comp-c-man .man
./usr/share/man/man3/prop_dictionary_get_cstring.3 comp-c-man .man
Index: lib/libprop/Makefile
===================================================================
RCS file: /cvsroot/src/lib/libprop/Makefile,v
retrieving revision 1.14
diff -d -p -u -u -r1.14 Makefile
--- lib/libprop/Makefile 27 Oct 2006 01:29:37 -0000 1.14
+++ lib/libprop/Makefile 27 Oct 2007 15:47:23 -0000
@@ -64,7 +64,9 @@ MLINKS+= prop_array.3 prop_array_create_
MLINKS+= prop_array.3 prop_array_ensure_capacity.3
MLINKS+= prop_array.3 prop_array_equals.3
MLINKS+= prop_array.3 prop_array_externalize.3
+MLINKS+= prop_array.3 prop_array_externalize_with_encoding.3
MLINKS+= prop_array.3 prop_array_externalize_to_file.3
+MLINKS+= prop_array.3 prop_array_externalize_to_file_with_encoding.3
MLINKS+= prop_array.3 prop_array_get.3
MLINKS+= prop_array.3 prop_array_internalize.3
MLINKS+= prop_array.3 prop_array_internalize_from_file.3
@@ -97,7 +99,9 @@ MLINKS+= prop_dictionary.3 prop_dictiona
MLINKS+= prop_dictionary.3 prop_dictionary_ensure_capacity.3
MLINKS+= prop_dictionary.3 prop_dictionary_equals.3
MLINKS+= prop_dictionary.3 prop_dictionary_externalize.3
+MLINKS+= prop_dictionary.3 prop_dictionary_externalize_with_encoding.3
MLINKS+= prop_dictionary.3 prop_dictionary_externalize_to_file.3
+MLINKS+= prop_dictionary.3 prop_dictionary_externalize_to_file_with_encoding.3
MLINKS+= prop_dictionary.3 prop_dictionary_get.3
MLINKS+= prop_dictionary.3 prop_dictionary_get_keysym.3
MLINKS+= prop_dictionary.3 prop_dictionary_internalize.3
Index: regress/lib/libprop/Makefile
===================================================================
RCS file: regress/lib/libprop/Makefile
diff -N regress/lib/libprop/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/Makefile 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,5 @@
+# $NetBSD$
+
+SUBDIR= propbench propconv
+
+.include <bsd.subdir.mk>
Index: regress/lib/libprop/propbench/Makefile
===================================================================
RCS file: regress/lib/libprop/propbench/Makefile
diff -N regress/lib/libprop/propbench/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/propbench/Makefile 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,32 @@
+# $NetBSD$
+
+NOMAN= # set
+PROG= plbench
+SRCS= main.c
+
+CPPFLAGS+= -I${NETBSDSRCDIR}/common/include
+CPPFLAGS+= -I${NETBSDSRCDIR}/common/lib/libprop
+
+LDADD+= -static
+DPADD+= ${LIBPTHREAD} ${LIBM}
+LDADD+= -lpthread -lm
+CFLAGS+= -Wall -Werror -g
+
+.if defined(LOOPS)
+PLARGS+= -n ${LOOPS}
+.endif
+
+.if defined(TIMES)
+PLARGS+= -v
+.endif
+
+regress: .PHONY ${PROG}
+ for sample in ${.CURDIR}/../samples/*.xml ;{ \
+ ./${PROG} ${PLARGS} $${sample} \
+ ;}
+
+gdb: .PHONY
+ gdb ${PROG} ${PROG}.core
+
+.include "${NETBSDSRCDIR}/common/lib/libprop/Makefile.inc"
+.include <bsd.prog.mk>
Index: regress/lib/libprop/propbench/main.c
===================================================================
RCS file: regress/lib/libprop/propbench/main.c
diff -N regress/lib/libprop/propbench/main.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/propbench/main.c 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,423 @@
+/* $NetBSD$ */
+
+/*-
+ * Copyright (c) 2007 Jachym Holecek <
[email protected]>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/resource.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libgen.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <prop/proplib.h>
+
+static const char *path;
+static const char *name;
+static u_long nloops = 10000;
+
+static double time_ioctl_xml = 0.0;
+static double time_ioctl_bin = 0.0;
+static double time_intern_xml = 0.0;
+static double time_intern_bin = 0.0;
+static double time_extern_xml = 0.0;
+static double time_extern_bin = 0.0;
+static size_t size_extern_xml;
+static size_t size_extern_bin;
+
+/*
+ * Utilities.
+ */
+static prop_object_t
+internalize(const char *path)
+{
+ prop_object_t po;
+
+ po = prop_dictionary_internalize_from_file(path);
+ if (po == NULL)
+ po = prop_array_internalize_from_file(path);
+
+ return (po);
+}
+
+static prop_object_t
+decode(uint8_t *buf, size_t len)
+{
+ prop_object_t po;
+
+ po = prop_dictionary_internalize(buf, len);
+ if (po == NULL)
+ po = prop_array_internalize(buf, len);
+
+ return (po);
+}
+
+static bool
+blistify(prop_object_t po, uint8_t **buf, size_t *len)
+{
+ if (prop_object_type(po) == PROP_TYPE_DICTIONARY) {
+ if (prop_dictionary_externalize_with_encoding(po, buf, len,
+ PROP_ENCODING_BINARY))
+ return (true);
+ } else {
+ if (prop_array_externalize_with_encoding(po, buf, len,
+ PROP_ENCODING_BINARY))
+ return (true);
+ }
+
+ return (false);
+}
+
+static bool
+xmlify(prop_object_t po, uint8_t **buf, size_t *len)
+{
+ if (prop_object_type(po) == PROP_TYPE_DICTIONARY) {
+ if (prop_dictionary_externalize_with_encoding(po, buf, len,
+ PROP_ENCODING_XML))
+ return (true);
+ } else {
+ if (prop_array_externalize_with_encoding(po, buf, len,
+ PROP_ENCODING_XML))
+ return (true);
+ }
+
+ return (false);
+}
+
+double
+getpoint(void)
+{
+ struct rusage ru;
+
+ if (getrusage(RUSAGE_SELF, &ru) == -1)
+ err(1, "getrusage");
+
+ return ((double)ru.ru_utime.tv_sec +
+ (double)ru.ru_utime.tv_usec/1000000.0);
+}
+
+static void
+failed(const char *fmt, ...)
+{
+ va_list ap;
+
+ fprintf(stderr, "FAILED %s ", name);
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ fprintf(stderr, "\n");
+ exit(EXIT_FAILURE);
+}
+
+/*
+ * Regression test, assumes input file is XML.
+ */
+
+static void
+regression(void)
+{
+ prop_object_t po1; /* plist from XML file */
+ prop_object_t po2;
+ uint8_t *buf;
+ size_t len;
+
+ po1 = internalize(path);
+ if (po1 == NULL)
+ failed("internalize XML file");
+
+ if (! xmlify(po1, &buf, &len))
+ failed("externalize XML");
+
+ po2 = decode(buf, len);
+ if (po2 == NULL)
+ failed("internalize XML");
+ free(buf);
+
+ if (! prop_object_equals(po1, po2))
+ failed("compare XML");
+ prop_object_release(po2);
+
+ if (! blistify(po1, &buf, &len))
+ failed("externalize binary");
+
+ po2 = decode(buf, len);
+ if (po2 == NULL)
+ failed("internalize binary");
+
+ if (! prop_object_equals(po1, po2))
+ failed("compare binary");
+ prop_object_release(po2);
+
+ prop_object_release(po1);
+}
+
+static void
+benchmark(void)
+{
+ prop_object_t po1;
+ prop_object_t po2;
+ uint8_t *buf;
+ uint8_t *tmp;
+ size_t len;
+ double beg;
+ int i;
+
+ po1 = internalize(path);
+ if (po1 == NULL)
+ failed("benchmark: internalize XML file");
+
+ /* How long does XML internalize take? */
+ if (! xmlify(po1, &buf, &len))
+ failed("benchmark: prepare XML");
+ size_extern_xml = len;
+
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ po2 = decode(buf, len);
+ if (po2 == NULL)
+ failed("benchmark: internalize XML");
+
+ time_intern_xml += (getpoint() - beg);
+ prop_object_release(po2);
+ }
+ free(buf);
+
+ /* How long does binary internalize take? */
+ if (! blistify(po1, &buf, &len))
+ failed("benchmark: prepare binary");
+ size_extern_bin = len;
+
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ po2 = decode(buf, len);
+ if (po2 == NULL)
+ failed("benchmark: internalize binary");
+
+ time_intern_bin += (getpoint() - beg);
+ prop_object_release(po2);
+ }
+ free(buf);
+
+ /* How long does XML externalize take? */
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ if (! xmlify(po1, &buf, &len))
+ failed("benchmark: externalize XML");
+
+ time_extern_xml += (getpoint() - beg);
+ free(buf);
+ }
+
+ /* How long does binary externalize take? */
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ if (! blistify(po1, &buf, &len))
+ failed("benchmark: externalize binary");
+
+ time_extern_bin += (getpoint() - beg);
+ free(buf);
+ }
+
+ /* How long does full XML transport take? */
+ tmp = malloc(size_extern_xml);
+ if (tmp == NULL)
+ failed("benchmark: transport XML buffer alloc");
+
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ if (! xmlify(po1, &buf, &len))
+ failed("benchmark: transport XML send");
+
+ if (len != size_extern_xml)
+ failed("banchmark: transport size mismatch");
+
+ memcpy(tmp, buf, len);
+ po2 = decode(tmp, len);
+ if (po2 == NULL)
+ failed("benchmark: transport XML recv");
+
+ time_ioctl_xml += (getpoint() - beg);
+ prop_object_release(po2);
+ free(buf);
+ }
+
+ free(tmp);
+
+ /* How long does full binary transport take? */
+ tmp = malloc(size_extern_bin);
+ if (tmp == NULL)
+ failed("benchmark: transport binary buffer alloc");
+
+ for (i = 0; i < nloops; i++) {
+ beg = getpoint();
+
+ if (! blistify(po1, &buf, &len))
+ failed("benchmark: transport binary send");
+
+ if (len != size_extern_bin)
+ failed("benchmark: transport binary size mismatch");
+
+ memcpy(tmp, buf, len);
+ po2 = decode(tmp, len);
+ if (po2 == NULL)
+ failed("benchmark: transport binary recv");
+
+ time_ioctl_bin += (getpoint() - beg);
+ prop_object_release(po2);
+ free(buf);
+ }
+
+ free(tmp);
+}
+
+static double
+percentage(double big, double small)
+{
+ /* percentage = small / (big / 100) = (100 * small) / big */
+ return ((100 * small) / big);
+}
+
+int
+xstrtoul(char *str, u_long *val)
+{
+ char *end;
+ int base = 10;
+ u_long v;
+
+ if (str[0] == '0')
+ switch (str[1]) {
+ case 'x':
+ base = 16;
+ str += 2;
+ break;
+ case 'd':
+ base = 10;
+ str += 2;
+ break;
+ case 'o':
+ base = 8;
+ str += 2;
+ break;
+ case 'b':
+ base = 2;
+ str += 2;
+ break;
+ }
+
+ v = (u_long) strtoul(str, &end, base);
+ if (*end != '\0' || str[0] == '\0')
+ return (EINVAL);
+
+ *val = v;
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ double val1;
+ double val2;
+ int verbose = 0;
+ int c;
+
+ while ((c = getopt(argc, argv, "hn:v")) != -1)
+ switch (c) {
+ case 'h':
+ warnx("Usage: plbench -h");
+ warnx(" plbench [-n <nloops>] [-v]");
+ exit(EXIT_SUCCESS);
+
+ case 'n':
+ if (xstrtoul(optarg, &nloops))
+ errx(EXIT_FAILURE, "integer expected");
+ break;
+
+ case 'v':
+ verbose = 1;
+ break;
+
+ default:
+ errx(EXIT_FAILURE, "invalid or misused option -%c",
+ optopt);
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ errx(1, "need exactly one XML plist file argument");
+
+ path = argv[0];
+ name = basename(argv[0]);
+
+ regression();
+ benchmark();
+
+ printf("PASSED %s ", name);
+
+
+ if (verbose)
+ printf("("
+ "XML %3.2fs %3.2fs %3.2f %6uB "
+ "BIN %3.2fs %3.2fs %3.2f %6uB"
+ ")",
+ time_intern_xml, time_extern_xml, time_ioctl_xml,
+ (u_int)size_extern_xml,
+ time_intern_bin, time_extern_bin, time_ioctl_bin,
+ (u_int)size_extern_bin);
+ else {
+ /* Relative results for full transport benchmark. */
+ printf("TRANSPORT %3.0f%% ",
+ percentage(time_ioctl_xml, time_ioctl_bin));
+
+ /* Relative results for raw intern/extern benchmark. */
+ val1 = (time_intern_xml + time_extern_xml);
+ val2 = (time_intern_bin + time_extern_bin);
+ printf("RAW %3.0f%% ", percentage(val1, val2));
+
+ /* Relative results for encoding size benchmark. */
+ printf("SIZE %3.0f%% ",
+ percentage(size_extern_xml, size_extern_bin));
+ }
+
+ printf("\n");
+ return (0);
+}
Index: regress/lib/libprop/propconv/Makefile
===================================================================
RCS file: regress/lib/libprop/propconv/Makefile
diff -N regress/lib/libprop/propconv/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/propconv/Makefile 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,45 @@
+# $NetBSD$
+
+NOMAN= # set
+PROG= plconv
+SRCS= main.c
+
+CPPFLAGS+= -I${NETBSDSRCDIR}/common/include
+CPPFLAGS+= -I${NETBSDSRCDIR}/common/lib/libprop
+
+LDADD+= -static
+
+DPADD+= ${LIBPTHREAD}
+LDADD+= -lpthread # -pg
+CFLAGS+= -g -Wall -Werror # -pg
+
+.include "${NETBSDSRCDIR}/common/lib/libprop/Makefile.inc"
+
+SAMPLEDIR= ${.CURDIR}/../samples
+SAMPLES!= cd ${SAMPLEDIR} && ls *.xml
+
+.for file in ${SAMPLES}
+. for codec in xml bplist
+${file}.${codec}: ${SAMPLEDIR}/${file} ${PROG}
+ @if ./${PROG} -O ${codec} -o ./${.TARGET} ${SAMPLEDIR}/${file} ; \
+ then \
+ echo PASSED convert ${.TARGET} ; \
+ else \
+ echo FAILED convert ${.TARGET} ; \
+ fi
+ @if ./${PROG} ${.TARGET} ${SAMPLEDIR}/${file} ; \
+ then \
+ echo PASSED compare ${.TARGET} ; \
+ else \
+ echo FAILED compare ${.TARGET} ; \
+ fi
+
+CLEANFILES+= ${file}.${codec}
+CONVERSIONS+= ${file}.${codec}
+. endfor
+.endfor
+
+# Run the full cartesian product.
+regress: .PHONY ${CONVERSIONS}
+
+.include <bsd.prog.mk>
Index: regress/lib/libprop/propconv/main.c
===================================================================
RCS file: regress/lib/libprop/propconv/main.c
diff -N regress/lib/libprop/propconv/main.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/propconv/main.c 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,157 @@
+/* $NetBSD$ */
+
+/*-
+ * Copyright (c) 2007 Jachym Holecek <
[email protected]>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <prop/proplib.h>
+
+static prop_object_t
+internalize(const char *path)
+{
+ prop_object_t po;
+
+ po = prop_dictionary_internalize_from_file(path);
+ if (po == NULL) {
+ po = prop_array_internalize_from_file(path);
+ if (po == NULL)
+ errx(EXIT_FAILURE, "could not internalize %s", path);
+ }
+
+ return (po);
+}
+
+static void
+externalize(int fd, prop_object_t po, const char *format)
+{
+ uint8_t *buf;
+ size_t len;
+
+ if (strcasecmp(format, "xml") == 0) {
+ if (! prop_dictionary_externalize_with_encoding(po, &buf, &len,
+ PROP_ENCODING_XML) &&
+ ! prop_array_externalize_with_encoding(po, &buf, &len,
+ PROP_ENCODING_XML))
+ errx(EXIT_FAILURE, "could not externalize");
+ } else
+ if (strcasecmp(format, "bplist") == 0) {
+ if (! prop_dictionary_externalize_with_encoding(po, &buf, &len,
+ PROP_ENCODING_BINARY) &&
+ ! prop_array_externalize_with_encoding(po, &buf, &len,
+ PROP_ENCODING_BINARY))
+ errx(EXIT_FAILURE, "could not externalize");
+ }
+
+ /* Not prop_*_externalize_to_file(), stdout may be pipe/terminal. */
+ if (write(fd, buf, len) == -1)
+ err(EXIT_FAILURE, "could not write");
+}
+
+#define OPTIONS "ho:O:"
+
+static void
+usage(void)
+{
+ const char *me = getprogname();
+
+ printf("Usage: %s [-o file] [-O format] file\n", me);
+ printf(" %s file0 file1\n", me);
+ printf("-h \t Print (this) help\n");
+ printf("-o file \t Output file [stdout]\n");
+ printf("-O format \t Externalize format [xml bplist]\n");
+
+ exit(EXIT_SUCCESS);
+}
+
+int
+main(int argc, char *argv[])
+{
+ const char *oformat = "xml";
+ const char *opath = NULL;
+ int fdo = STDOUT_FILENO;
+ int c;
+
+ while ((c = getopt(argc, argv, OPTIONS)) != -1)
+ switch (c) {
+ case 'h': /* Help. */
+ usage();
+ /* UNREACHED */
+
+ case 'o': /* Output file. */
+ opath = optarg;
+ break;
+
+ case 'O': /* Externalize format. */
+ oformat = optarg;
+ break;
+
+ case '?':
+ errx(EXIT_FAILURE, "uknown option -%c", optopt);
+ /* UNREACHED */
+
+ case ':':
+ errx(EXIT_FAILURE, "missing argument to -%c", optopt);
+ /* UNREACHED */
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc == 2) {
+ if (prop_object_equals(internalize(argv[0]),
+ internalize(argv[1])))
+ return (EXIT_SUCCESS);
+
+ return (EXIT_FAILURE);
+ } else
+ if (argc == 1) {
+ prop_object_t po;
+
+ po = internalize(argv[0]);
+
+ if (opath != NULL) {
+ fdo = open(opath, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+ if (fdo == -1)
+ errx(EXIT_FAILURE, "could not open %s", opath);
+ }
+
+ externalize(fdo, po, oformat);
+ return (EXIT_SUCCESS);
+ }
+
+ warnx("unknown mode of operation");
+ return (EXIT_FAILURE);
+}
Index: regress/lib/libprop/samples/aa.xml
===================================================================
RCS file: regress/lib/libprop/samples/aa.xml
diff -N regress/lib/libprop/samples/aa.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/aa.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,62 @@
+<plist version="1.0">
+<dict>
+ <key>prep-pci-intrmap</key>
+ <dict>
+ <key>devfunc-11</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x0</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-12</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x0</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-13</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x0</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-14</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x11</integer>
+ <key>pin-B</key>
+ <integer>0x13</integer>
+ <key>pin-C</key>
+ <integer>0x12</integer>
+ <key>pin-D</key>
+ <integer>0x13</integer>
+ </dict>
+ <key>devfunc-15</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x14</integer>
+ <key>pin-B</key>
+ <integer>0x15</integer>
+ <key>pin-C</key>
+ <integer>0x14</integer>
+ <key>pin-D</key>
+ <integer>0x15</integer>
+ </dict>
+ </dict>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ab.xml
===================================================================
RCS file: regress/lib/libprop/samples/ab.xml
diff -N regress/lib/libprop/samples/ab.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ab.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,66 @@
+<plist version="1.0">
+<dict>
+ <key>prep-pci-intrmap</key>
+ <dict>
+ <key>devfunc-0</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x11</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-1</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x18</integer>
+ <key>pin-B</key>
+ <integer>0x19</integer>
+ <key>pin-C</key>
+ <integer>0x18</integer>
+ <key>pin-D</key>
+ <integer>0x19</integer>
+ </dict>
+ <key>devfunc-2</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1a</integer>
+ <key>pin-B</key>
+ <integer>0x1b</integer>
+ <key>pin-C</key>
+ <integer>0x1a</integer>
+ <key>pin-D</key>
+ <integer>0x1b</integer>
+ </dict>
+ <key>devfunc-3</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1c</integer>
+ <key>pin-B</key>
+ <integer>0x1d</integer>
+ <key>pin-C</key>
+ <integer>0x1c</integer>
+ <key>pin-D</key>
+ <integer>0x1d</integer>
+ </dict>
+ <key>devfunc-4</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1e</integer>
+ <key>pin-B</key>
+ <integer>0x1f</integer>
+ <key>pin-C</key>
+ <integer>0x1e</integer>
+ <key>pin-D</key>
+ <integer>0x1f</integer>
+ </dict>
+ </dict>
+ <key>prep-pcibus-parent</key>
+ <integer>0x0</integer>
+ <key>prep-pcibus-rawdevnum</key>
+ <integer>0xc</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ac.xml
===================================================================
RCS file: regress/lib/libprop/samples/ac.xml
diff -N regress/lib/libprop/samples/ac.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ac.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,84 @@
+<plist version="1.0">
+<dict>
+ <key>prep-pci-intrmap</key>
+ <dict>
+ <key>devfunc-11</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x10</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-12</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x13</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-14</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x12</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-16</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x19</integer>
+ <key>pin-B</key>
+ <integer>0x1a</integer>
+ <key>pin-C</key>
+ <integer>0x1b</integer>
+ <key>pin-D</key>
+ <integer>0x1c</integer>
+ </dict>
+ <key>devfunc-17</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1a</integer>
+ <key>pin-B</key>
+ <integer>0x1b</integer>
+ <key>pin-C</key>
+ <integer>0x1c</integer>
+ <key>pin-D</key>
+ <integer>0x19</integer>
+ </dict>
+ <key>devfunc-18</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1b</integer>
+ <key>pin-B</key>
+ <integer>0x1c</integer>
+ <key>pin-C</key>
+ <integer>0x19</integer>
+ <key>pin-D</key>
+ <integer>0x1a</integer>
+ </dict>
+ <key>devfunc-19</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x1c</integer>
+ <key>pin-B</key>
+ <integer>0x19</integer>
+ <key>pin-C</key>
+ <integer>0x1a</integer>
+ <key>pin-D</key>
+ <integer>0x1b</integer>
+ </dict>
+ </dict>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ad.xml
===================================================================
RCS file: regress/lib/libprop/samples/ad.xml
diff -N regress/lib/libprop/samples/ad.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ad.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,8 @@
+<plist version="1.0">
+<dict>
+ <key>prep-pcibus-parent</key>
+ <integer>0x0</integer>
+ <key>prep-pcibus-rawdevnum</key>
+ <integer>0x10</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ae.xml
===================================================================
RCS file: regress/lib/libprop/samples/ae.xml
diff -N regress/lib/libprop/samples/ae.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ae.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,62 @@
+<plist version="1.0">
+<dict>
+ <key>prep-pci-intrmap</key>
+ <dict>
+ <key>devfunc-11</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x10</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-12</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x13</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-13</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x15</integer>
+ <key>pin-B</key>
+ <integer>0x16</integer>
+ <key>pin-C</key>
+ <integer>0x17</integer>
+ <key>pin-D</key>
+ <integer>0x18</integer>
+ </dict>
+ <key>devfunc-14</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x12</integer>
+ <key>pin-B</key>
+ <integer>0x0</integer>
+ <key>pin-C</key>
+ <integer>0x0</integer>
+ <key>pin-D</key>
+ <integer>0x0</integer>
+ </dict>
+ <key>devfunc-16</key>
+ <dict>
+ <key>pin-A</key>
+ <integer>0x19</integer>
+ <key>pin-B</key>
+ <integer>0x1a</integer>
+ <key>pin-C</key>
+ <integer>0x1b</integer>
+ <key>pin-D</key>
+ <integer>0x1c</integer>
+ </dict>
+ </dict>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/af.xml
===================================================================
RCS file: regress/lib/libprop/samples/af.xml
diff -N regress/lib/libprop/samples/af.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/af.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,196 @@
+<plist version="1.0">
+<dict>
+ <key>id</key>
+ <string>NetBSD-UP2006-0001</string>
+
+ <key>date</key>
+ <string>2006-06-08</string>
+
+ <key>class</key>
+ <string>security</string>
+
+ <key>priority</key>
+ <string>medium</string>
+
+ <key>title</key>
+ <string>FPU Information leak on i386/amd64/Xen platforms with AMD CPUs</string>
+
+ <key>brief</key>
+ <string>
+ Due to the documented behavior of AMD processors when running amd64, i386
+ and Xen NetBSD kernels, processors using floating point operations can leak
+ information. This may allow a local attacker to gain sensitive privileged
+ information.
+ </string>
+
+ <key>references</key>
+ <array>
+ <dict>
+ <key>type</key>
+ <string>NetBSD security advisory</string>
+ <key>data</key>
+ <string>NetBSD-SA2006-015</string>
+ </dict>
+
+ <dict>
+ <key>type</key>
+ <string>CVE reference</string>
+ <key>data</key>
+ <string>CVE-2006-1056</string>
+ </dict>
+ </array>
+
+ <key>affected</key>
+ <array>
+ <dict>
+ <key>branch</key>
+ <string>head</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>amd64</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/amd64/amd64/fpu.c</string>
+ <key>revision</key>
+ <string>1.115</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>i386</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/i386/isa/npx.c</string>
+ <key>revision</key>
+ <string>1.112</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>xen</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/xen/i386/npx.c</string>
+ <key>revision</key>
+ <string>1.8</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>branch</key>
+ <string>netbsd-3</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>amd64</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/amd64/amd64/fpu.c</string>
+ <key>revision</key>
+ <string>1.12.10.2</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>i386</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/i386/isa/npx.c</string>
+ <key>revision</key>
+ <string>1.107.4.1</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>xen</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/xen/i386/npx.c</string>
+ <key>revision</key>
+ <string>1.3.14.3</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>branch</key>
+ <string>netbsd-2</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>amd64</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/amd64/amd64/fpu.c</string>
+ <key>revision</key>
+ <string>1.11.4.2</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>i386</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/i386/isa/npx.c</string>
+ <key>revision</key>
+ <string>1.103.2.2.2.1</string>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>arch</key>
+ <string>xen</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/sys/arch/xen/i386/npx.c</string>
+ <key>revision</key>
+ <string>1.1.2.1.2.1</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+ </array>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ag.xml
===================================================================
RCS file: regress/lib/libprop/samples/ag.xml
diff -N regress/lib/libprop/samples/ag.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ag.xml 27 Oct 2007 15:47:23 -0000
@@ -0,0 +1,161 @@
+<plist version="1.0">
+<dict>
+ <key>id</key>
+ <string>NetBSD-UP2006-0002</string>
+
+ <key>date</key>
+ <string>2006-08-10</string>
+
+ <key>class</key>
+ <string>security</string>
+
+ <key>priority</key>
+ <string>medium</string>
+
+ <key>title</key>
+ <string>sail(6), dm(8) and tetris(6) buffer overflows</string>
+
+ <key>brief</key>
+ <string>
+ The sail, dungeon master arbiter and tetris games all contain buffer
+ overflows. These programs are installed sgid games, and when
+ successfully exploited the vulnerabilities may allow an attacker to
+ elevate their privileges to the games group.
+ </string>
+
+ <key>references</key>
+ <array>
+ <dict>
+ <key>type</key>
+ <string>NetBSD security advisory</string>
+ <key>data</key>
+ <string>NetBSD-SA2006-018</string>
+ </dict>
+
+ <dict>
+ <key>type</key>
+ <string>CVE reference for sail(6)</string>
+ <key>data</key>
+ <string>CVE-2006-1744</string>
+ </dict>
+
+ <dict>
+ <key>type</key>
+ <string>CVE reference for tetris(6)</string>
+ <key>data</key>
+ <string>CVE-2006-1539</string>
+ </dict>
+ </array>
+
+ <key>affected</key>
+ <array>
+ <dict>
+ <key>branch</key>
+ <string>head</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>all</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/games/dm/dm.c</string>
+ <key>revision</key>
+ <string>1.23</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/sail/pl_main.c</string>
+ <key>revision</key>
+ <string>1.17</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/tetris/scores.c</string>
+ <key>revision</key>
+ <string>1.14</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>branch</key>
+ <string>netbsd-3</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>all</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/games/dm/dm.c</string>
+ <key>revision</key>
+ <string>1.21.2.1</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/sail/pl_main.c</string>
+ <key>revision</key>
+ <string>1.16.6.1</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/tetris/scores.c</string>
+ <key>revision</key>
+ <string>1.13.6.1</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+
+ <dict>
+ <key>branch</key>
+ <string>netbsd-2</string>
+
+ <key>archs</key>
+ <array>
+ <dict>
+ <key>arch</key>
+ <string>all</string>
+ <key>files</key>
+ <array>
+ <dict>
+ <key>file</key>
+ <string>src/games/dm/dm.c</string>
+ <key>revision</key>
+ <string>1.20.4.1</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/sail/pl_main.c</string>
+ <key>revision</key>
+ <string>1.16.4.1</string>
+ </dict>
+
+ <dict>
+ <key>file</key>
+ <string>src/games/tetris/scores.c</string>
+ <key>revision</key>
+ <string>1.13.4.1</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+ </array>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ah.xml
===================================================================
RCS file: regress/lib/libprop/samples/ah.xml
diff -N regress/lib/libprop/samples/ah.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ah.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AB21vCardEncoding</key>
+ <string>MACINTOSH</string>
+ <key>ABDefaultAddressCountryCode</key>
+ <string>us</string>
+ <key>ABImportTipCards</key>
+ <true/>
+ <key>ABMetaDataChangeCount</key>
+ <integer>3</integer>
+ <key>ABNameDisplay</key>
+ <integer>0</integer>
+ <key>ABNameSorting</key>
+ <integer>1</integer>
+ <key>ABSKCompactionHint</key>
+ <integer>5</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ai.xml
===================================================================
RCS file: regress/lib/libprop/samples/ai.xml
diff -N regress/lib/libprop/samples/ai.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ai.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AppendAMPM</key>
+ <true/>
+ <key>ClockDigital</key>
+ <true/>
+ <key>ClockEnabled</key>
+ <true/>
+ <key>DisplaySeconds</key>
+ <false/>
+ <key>FlashSeparators</key>
+ <false/>
+ <key>LastSavedGlobalTimeString</key>
+ <string>h:mm:ss a</string>
+ <key>PreferencesVersion</key>
+ <integer>2</integer>
+ <key>ShowDay</key>
+ <true/>
+ <key>Use24HourClock</key>
+ <false/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/aj.xml
===================================================================
RCS file: regress/lib/libprop/samples/aj.xml
diff -N regress/lib/libprop/samples/aj.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/aj.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AgentLastLaunched</key>
+ <integer>174413322</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ak.xml
===================================================================
RCS file: regress/lib/libprop/samples/ak.xml
diff -N regress/lib/libprop/samples/ak.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ak.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>LastExpireCheck</key>
+ <integer>732504</integer>
+ <key>LastIntegrityCheck</key>
+ <integer>732504</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/al.xml
===================================================================
RCS file: regress/lib/libprop/samples/al.xml
diff -N regress/lib/libprop/samples/al.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/al.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>NSRecentDocumentRecords</key>
+ <array>
+ <dict>
+ <key>_NSLocator</key>
+ <dict>
+ <key>_NSPath</key>
+ <string>/afs/ms.mff.cuni.cz/u/c/cahyp8am/diplomka/clanek/V.doc</string>
+ </dict>
+ </dict>
+ </array>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/am.xml
===================================================================
RCS file: regress/lib/libprop/samples/am.xml
diff -N regress/lib/libprop/samples/am.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/am.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>WebIconDatabaseEnabled</key>
+ <false/>
+ <key>__NSEnableTSMDocumentWindowLevel</key>
+ <true/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/an.xml
===================================================================
RCS file: regress/lib/libprop/samples/an.xml
diff -N regress/lib/libprop/samples/an.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/an.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.TextEdit</key>
+ <array>
+ <array>
+ <string>TextEditHelp</string>
+ <string>file://localhost/Applications/TextEdit.app/Contents/Resources/English.lproj/TextEditHelp/</string>
+ </array>
+ </array>
+ <key>hu.mplayerhq.mplayerosx</key>
+ <array>
+ <array>
+ <string>MPlayer OSX Help</string>
+ <string>file://localhost/Applications/MPlayer%20OSX.app/Contents/Resources/English.lproj/MPlayer%20OSX%20Help/</string>
+ </array>
+ </array>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ao.xml
===================================================================
RCS file: regress/lib/libprop/samples/ao.xml
diff -N regress/lib/libprop/samples/ao.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ao.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>HVIncludesKBSearches</key>
+ <true/>
+ <key>NSRecentDocumentRecords</key>
+ <array/>
+ <key>WebIconDatabaseDirectoryDefaultsKey</key>
+ <string>~/Library/Icons</string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ap.xml
===================================================================
RCS file: regress/lib/libprop/samples/ap.xml
diff -N regress/lib/libprop/samples/ap.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ap.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>WWWHomePage</key>
+ <string>
http://livepage.apple.com/</string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/aq.xml
===================================================================
RCS file: regress/lib/libprop/samples/aq.xml
diff -N regress/lib/libprop/samples/aq.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/aq.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,902 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>WebPluginLocalizationName</key>
+ <string>en_US</string>
+ <key>WebPluginMIMETypes</key>
+ <dict>
+ <key>application/pdf</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>pdf</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>PDF Image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>application/sdp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>sdp</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>SDP stream descriptor</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>application/smil</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>smi</string>
+ <string>sml</string>
+ <string>smil</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>SMIL 1.0</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>application/x-mpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>amc</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AMC media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>application/x-quicktimeplayer</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>qtl</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QuickTime Player Movie</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>application/x-quicktimeupdater</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>qup</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QuickTime Update Package</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>application/x-rtsp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>rtsp</string>
+ <string>rts</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>RTSP stream descriptor</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>application/x-sdp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>sdp</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>SDP stream descriptor</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>application/x-shockwave-flash</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>swf</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Flash media</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>audio/3gpp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>3gp</string>
+ <string>3gpp</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>3GPP media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/3gpp2</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>3g2</string>
+ <string>3gp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>3GPP2 media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/AMR</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>AMR</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AMR audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/aac</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>aac</string>
+ <string>adts</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AAC audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/aiff</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>aiff</string>
+ <string>aif</string>
+ <string>aifc</string>
+ <string>cdda</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AIFF audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/basic</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>au</string>
+ <string>snd</string>
+ <string>ulw</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>uLaw/AU audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mid</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mid</string>
+ <string>midi</string>
+ <string>smf</string>
+ <string>kar</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MIDI</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/midi</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mid</string>
+ <string>midi</string>
+ <string>smf</string>
+ <string>kar</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MIDI</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mp3</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mp4</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp4</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG-4 media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mpeg</string>
+ <string>mpg</string>
+ <string>m1s</string>
+ <string>m1a</string>
+ <string>mp2</string>
+ <string>mpm</string>
+ <string>mpa</string>
+ <string>m2a</string>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mpeg3</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/mpegurl</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m3u</string>
+ <string>m3url</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 playlist</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>audio/vnd.qcelp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>qcp</string>
+ <string>qcp</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QUALCOMM PureVoice audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/wav</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>wav</string>
+ <string>bwf</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>WAVE audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-aac</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>aac</string>
+ <string>adts</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AAC audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-aiff</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>aiff</string>
+ <string>aif</string>
+ <string>aifc</string>
+ <string>cdda</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AIFF audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-caf</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>caf</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>CAF audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-gsm</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>gsm</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>GSM audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-m4a</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m4a</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AAC audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-m4b</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m4b</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AAC audio book</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-m4p</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m4p</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AAC audio (protected)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-midi</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mid</string>
+ <string>midi</string>
+ <string>smf</string>
+ <string>kar</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MIDI</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-mp3</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-mpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mpeg</string>
+ <string>mpg</string>
+ <string>m1s</string>
+ <string>m1a</string>
+ <string>mp2</string>
+ <string>mpm</string>
+ <string>mpa</string>
+ <string>m2a</string>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-mpeg3</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp3</string>
+ <string>swa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>audio/x-mpegurl</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m3u</string>
+ <string>m3url</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MP3 playlist</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>audio/x-sd2</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>sd2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Sound Designer II</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>audio/x-wav</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>wav</string>
+ <string>bwf</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>WAVE audio</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/gif</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>gif</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>GIF image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>image/jp2</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG2000 image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/jpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jpeg</string>
+ <string>jpg</string>
+ <string>jpe</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>image/jpeg2000</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG2000 image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/jpeg2000-image</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG2000 image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/pict</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>pict</string>
+ <string>pic</string>
+ <string>pct</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>PICT image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/pjpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jpeg</string>
+ <string>jpg</string>
+ <string>jpe</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>image/png</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>png</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>PNG image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/tiff</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>tif</string>
+ <string>tiff</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>TIFF image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/vnd.fpx</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>fpx</string>
+ <string>fpix</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>FlashPix image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>image/x-bmp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>bmp</string>
+ <string>dib</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>BMP image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-jpeg2000-image</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>jp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>JPEG2000 image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-macpaint</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>pntg</string>
+ <string>pnt</string>
+ <string>mac</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MacPaint image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-photoshop</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>psd</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Photoshop image</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>image/x-pict</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>pict</string>
+ <string>pic</string>
+ <string>pct</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>PICT image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-png</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>png</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>PNG image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-quicktime</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>qtif</string>
+ <string>qti</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QuickTime image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-sgi</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>sgi</string>
+ <string>rgb</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>SGI image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-targa</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>targa</string>
+ <string>tga</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>TGA image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>image/x-tiff</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>tif</string>
+ <string>tiff</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>TIFF image</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>text/x-html-insertion</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>qht</string>
+ <string>qhtm</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QuickTime HTML (QHTM)</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>video/3gpp</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>3gp</string>
+ <string>3gpp</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>3GPP media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/3gpp2</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>3g2</string>
+ <string>3gp2</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>3GPP2 media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/avi</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>avi</string>
+ <string>vfw</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Video For Windows (AVI)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/flc</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>flc</string>
+ <string>fli</string>
+ <string>cel</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>AutoDesk Animator (FLC)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/mp4</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mp4</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG-4 media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/mpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mpeg</string>
+ <string>mpg</string>
+ <string>m1s</string>
+ <string>m1v</string>
+ <string>m1a</string>
+ <string>m75</string>
+ <string>m15</string>
+ <string>mp2</string>
+ <string>mpm</string>
+ <string>mpv</string>
+ <string>mpa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/msvideo</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>avi</string>
+ <string>vfw</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Video For Windows (AVI)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/quicktime</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mov</string>
+ <string>qt</string>
+ <string>mqv</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>QuickTime Movie</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/sd-video</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>sdv</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>SD video</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/x-dv</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>dv</string>
+ <string>dif</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Digital video (DV)</string>
+ <key>WebPluginTypeEnabled</key>
+ <false/>
+ </dict>
+ <key>video/x-m4v</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>m4v</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Video (protected)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/x-mpeg</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>mpeg</string>
+ <string>mpg</string>
+ <string>m1s</string>
+ <string>m1v</string>
+ <string>m1a</string>
+ <string>m75</string>
+ <string>m15</string>
+ <string>mp2</string>
+ <string>mpm</string>
+ <string>mpv</string>
+ <string>mpa</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>MPEG media</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ <key>video/x-msvideo</key>
+ <dict>
+ <key>WebPluginExtensions</key>
+ <array>
+ <string>avi</string>
+ <string>vfw</string>
+ </array>
+ <key>WebPluginTypeDescription</key>
+ <string>Video For Windows (AVI)</string>
+ <key>WebPluginTypeEnabled</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ar.xml
===================================================================
RCS file: regress/lib/libprop/samples/ar.xml
diff -N regress/lib/libprop/samples/ar.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ar.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AbsoluteSchedule</key>
+ <dict/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/as.xml
===================================================================
RCS file: regress/lib/libprop/samples/as.xml
diff -N regress/lib/libprop/samples/as.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/as.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>__NSEnableTSMDocumentWindowLevel</key>
+ <true/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/at.xml
===================================================================
RCS file: regress/lib/libprop/samples/at.xml
diff -N regress/lib/libprop/samples/at.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/at.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>done_xinit_check</key>
+ <true/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/au.xml
===================================================================
RCS file: regress/lib/libprop/samples/au.xml
diff -N regress/lib/libprop/samples/au.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/au.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>BuildVersionStampAsNumber</key>
+ <integer>17371360</integer>
+ <key>BuildVersionStampAsString</key>
+ <string>8J135</string>
+ <key>SystemVersionStampAsNumber</key>
+ <integer>168036096</integer>
+ <key>SystemVersionStampAsString</key>
+ <string>10.4.7</string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/av.xml
===================================================================
RCS file: regress/lib/libprop/samples/av.xml
diff -N regress/lib/libprop/samples/av.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/av.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>checked-for-dashboard</key>
+ <true/>
+ <key>mod-count</key>
+ <integer>2</integer>
+ <key>persistent-apps</key>
+ <array>
+ <dict>
+ <key>tile-data</key>
+ <dict>
+ <key>file-label</key>
+ <string></string>
+ </dict>
+ <key>tile-type</key>
+ <string>dashboard-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550320</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACIAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQAA/jsAAL5NKmAAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AEgAIAE0AYQBpAGwA
+ LgBhAHAAcAAPAAgAAwBIAEQARAASABVBcHBs
+ aWNhdGlvbnMvTWFpbC5hcHAAABMAAS8A//8A
+ AA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/Mail.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>Mail</string>
+ <key>file-mod-date</key>
+ <integer>3234415823</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550321</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACOAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQABVRAAAL4xm1MAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AFgAKAFMAYQBmAGEA
+ cgBpAC4AYQBwAHAADwAIAAMASABEAEQAEgAX
+ QXBwbGljYXRpb25zL1NhZmFyaS5hcHAAABMA
+ AS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/Safari.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>Safari</string>
+ <key>file-mod-date</key>
+ <integer>3234415823</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550322</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACKAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQABREwAAL98VkMAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AFAAJAGkAQwBoAGEA
+ dAAuAGEAcABwAA8ACAADAEgARABEABIAFkFw
+ cGxpY2F0aW9ucy9pQ2hhdC5hcHAAEwABLwD/
+ /wAA
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/iChat.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iChat</string>
+ <key>file-mod-date</key>
+ <integer>3234415823</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550323</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACgAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQABFTgAAL9+JFIAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AIgAQAEEAZABkAHIA
+ ZQBzAHMAIABCAG8AbwBrAC4AYQBwAHAADwAI
+ AAMASABEAEQAEgAdQXBwbGljYXRpb25zL0Fk
+ ZHJlc3MgQm9vay5hcHAAABMAAS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/Address Book.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>Address Book</string>
+ <key>file-mod-date</key>
+ <integer>3234415823</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550324</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACOAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQABOgYAAL9+IXEAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AFgAKAGkAVAB1AG4A
+ ZQBzAC4AYQBwAHAADwAIAAMASABEAEQAEgAX
+ QXBwbGljYXRpb25zL2lUdW5lcy5hcHAAABMA
+ AS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/iTunes.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iTunes</string>
+ <key>file-mod-date</key>
+ <integer>3224322669</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550325</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLString</key>
+ <string>/Applications/iPhoto.app</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iPhoto</string>
+ <key>file-mod-date</key>
+ <integer>0</integer>
+ <key>file-type</key>
+ <integer>1</integer>
+ <key>parent-mod-date</key>
+ <integer>0</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550326</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLString</key>
+ <string>/Applications/iMovie.app</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iMovie</string>
+ <key>file-mod-date</key>
+ <integer>0</integer>
+ <key>file-type</key>
+ <integer>1</integer>
+ <key>parent-mod-date</key>
+ <integer>0</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550327</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLString</key>
+ <string>/Applications/iMovie HD.app</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iMovie HD</string>
+ <key>file-mod-date</key>
+ <integer>0</integer>
+ <key>file-type</key>
+ <integer>1</integer>
+ <key>parent-mod-date</key>
+ <integer>0</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550328</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACIAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQABIVwAAL8vox8AAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AEgAIAGkAQwBhAGwA
+ LgBhAHAAcAAPAAgAAwBIAEQARAASABVBcHBs
+ aWNhdGlvbnMvaUNhbC5hcHAAABMAAS8A//8A
+ AA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/iCal.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>iCal</string>
+ <key>file-mod-date</key>
+ <integer>3207570207</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550329</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACsAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQAAXNUAAL9+JEcAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4AKgAUAFEAdQBpAGMA
+ awBUAGkAbQBlACAAUABsAGEAeQBlAHIALgBh
+ AHAAcAAPAAgAAwBIAEQARAASACFBcHBsaWNh
+ dGlvbnMvUXVpY2tUaW1lIFBsYXllci5hcHAA
+ ABMAAS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/QuickTime Player.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>QuickTime Player</string>
+ <key>file-mod-date</key>
+ <integer>3234415823</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ <dict>
+ <key>GUID</key>
+ <integer>510550330</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAACyAAMAAQAAwA9pqQAASCsAAAAAAAAB
+ LQAAa9cAAL8vzjAAAAAACSD//gAAAAAAAAAA
+ /////wABAAQAAAEtAA4ALgAWAFMAeQBzAHQA
+ ZQBtACAAUAByAGUAZgBlAHIAZQBuAGMAZQBz
+ AC4AYQBwAHAADwAIAAMASABEAEQAEgAjQXBw
+ bGljYXRpb25zL1N5c3RlbSBQcmVmZXJlbmNl
+ cy5hcHAAABMAAS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>/Applications/System Preferences.app/</string>
+ <key>_CFURLStringType</key>
+ <integer>0</integer>
+ </dict>
+ <key>file-label</key>
+ <string>System Preferences</string>
+ <key>file-mod-date</key>
+ <integer>3207581232</integer>
+ <key>file-type</key>
+ <integer>41</integer>
+ <key>parent-mod-date</key>
+ <integer>3234415823</integer>
+ </dict>
+ <key>tile-type</key>
+ <string>file-tile</string>
+ </dict>
+ </array>
+ <key>persistent-others</key>
+ <array>
+ <dict>
+ <key>GUID</key>
+ <integer>510550331</integer>
+ <key>tile-data</key>
+ <dict>
+ <key>label</key>
+ <string>Apple - Mac OS X</string>
+ <key>url</key>
+ <dict>
+ <key>_CFURLString</key>
+ <string>
http://www.apple.com/macosx</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <key>tile-type</key>
+ <string>url-tile</string>
+ </dict>
+ </array>
+ <key>version</key>
+ <integer>1</integer>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/aw.xml
===================================================================
RCS file: regress/lib/libprop/samples/aw.xml
diff -N regress/lib/libprop/samples/aw.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/aw.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ComputerOptions</key>
+ <dict/>
+ <key>FXToolbarItems</key>
+ <array>
+ <dict>
+ <key>item-id</key>
+ <string>BACK</string>
+ </dict>
+ <dict>
+ <key>item-id</key>
+ <string>SWCH</string>
+ </dict>
+ <dict>
+ <key>item-id</key>
+ <string>ACTN</string>
+ </dict>
+ <dict>
+ <key>item-id</key>
+ <string>flxs</string>
+ </dict>
+ <dict>
+ <key>item-id</key>
+ <string>SRCH</string>
+ </dict>
+ </array>
+ <key>FXToolbarPrefsVersion</key>
+ <string>1</string>
+ <key>FileViewer.LastWindowLocation</key>
+ <string>143, 192, 841, 811</string>
+ <key>TrashOptions</key>
+ <dict/>
+ <key>WindowState</key>
+ <array>
+ <string>BROw</string>
+ <dict>
+ <key>ScrollPosition</key>
+ <dict>
+ <key>h</key>
+ <integer>0</integer>
+ <key>v</key>
+ <integer>220</integer>
+ </dict>
+ <key>ShowToolbar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>124</integer>
+ <key>Target</key>
+ <string>file://localhost/Applications/Utilities/</string>
+ <key>ViewHeight</key>
+ <integer>619</integer>
+ <key>ViewStyle</key>
+ <string>icnv</string>
+ <key>WindowBounds</key>
+ <dict>
+ <key>bottom</key>
+ <integer>811</integer>
+ <key>left</key>
+ <integer>143</integer>
+ <key>right</key>
+ <integer>841</integer>
+ <key>top</key>
+ <integer>192</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>recent-folders</key>
+ <array>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAAEsAAIAAQNIREQAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADAD3e5SCsAAAAAAS0JVXRpbGl0aWVzAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABLr+AjHoAAAAAAAAAAP//
+ //8AAAkgAAAAAAAAAAAAAAAAAAAADEFwcGxpY2F0aW9u
+ cwAQAAgAAMAPaakAAAARAAgAAL+AcFoAAAABAAQAAAEt
+ AAIAGkhERDpBcHBsaWNhdGlvbnM6VXRpbGl0aWVzAA4A
+ FAAJAFUAdABpAGwAaQB0AGkAZQBzAA8ACAADAEgARABE
+ ABIAFkFwcGxpY2F0aW9ucy9VdGlsaXRpZXMAEwABLwD/
+ /wAA
+ </data>
+ <key>_CFURLString</key>
+ <string>file://localhost/Applications/Utilities/</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAAESAAIAAQNIREQAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADAD3e5SCsAAAAAAAIMQXBwbGljYXRpb25zAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABLb+Ag7EAAAAAAAAAAP//
+ //8AAAkgAAAAAAAAAAAAAAAAAAAAA0hERAAAEAAIAADA
+ D2mpAAAAEQAIAAC/gGeRAAAAAQAAAAIAEEhERDpBcHBs
+ aWNhdGlvbnMADgAaAAwAQQBwAHAAbABpAGMAYQB0AGkA
+ bwBuAHMADwAIAAMASABEAEQAEgAMQXBwbGljYXRpb25z
+ ABMAAS8A//8AAA==
+ </data>
+ <key>_CFURLString</key>
+ <string>file://localhost/Applications/</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAAEWAAIAAQNhZnMAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAQkQAAf////8IY2FoeXA4YW0AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP//
+ //8AABIAY3UAAAAAAAAAAAAAAAAAAWMAAAIAIS86YWZz
+ Om1zLm1mZi5jdW5pLmN6OnU6YzpjYWh5cDhhbQAADgAS
+ AAgAYwBhAGgAeQBwADgAYQBtAA8ACAADAGEAZgBzABIA
+ HC9tcy5tZmYuY3VuaS5jei91L2MvY2FoeXA4YW0AEwAE
+ L2FmcwAVAAIAIP//AAA=
+ </data>
+ <key>_CFURLString</key>
+ <string>file://localhost/afs/ms.mff.cuni.cz/u/c/cahyp8am/</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAAEqAAIAAQNhZnMAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAQkQAAf////8HRGVza3RvcAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP//
+ //8AABIAY3UAAAAAAAAAAAAAAAAACGNhaHlwOGFtAAIA
+ KS86YWZzOm1zLm1mZi5jdW5pLmN6OnU6YzpjYWh5cDhh
+ bTpEZXNrdG9wAAAOABAABwBEAGUAcwBrAHQAbwBwAA8A
+ CAADAGEAZgBzABIAJC9tcy5tZmYuY3VuaS5jei91L2Mv
+ Y2FoeXA4YW0vRGVza3RvcAATAAQvYWZzABUAAgAg//8A
+ AA==
+ </data>
+ <key>_CFURLString</key>
+ <string>file://localhost/afs/ms.mff.cuni.cz/u/c/cahyp8am/Desktop/</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>file-data</key>
+ <dict>
+ <key>_CFURLAliasData</key>
+ <data>
+ AAAAAADIAAIAAQNhZnMAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAQkQAAf////8DYWZzAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP//
+ //8AABIAY3UAAAAAAAAAAAAAAAIABS86YWZzAAAOAAgA
+ AwBhAGYAcwAPAAgAAwBhAGYAcwASAAAAEwAEL2Fmc///
+ AAA=
+ </data>
+ <key>_CFURLString</key>
+ <string>file://localhost/afs/</string>
+ <key>_CFURLStringType</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>toolbar-view-style</key>
+ <string>2</string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ax.xml
===================================================================
RCS file: regress/lib/libprop/samples/ax.xml
diff -N regress/lib/libprop/samples/ax.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ax.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Applications</key>
+ <dict>
+ <key>Controller</key>
+ <string>CustomListItems</string>
+ <key>CustomListItems</key>
+ <array>
+ <dict>
+ <key>Alias</key>
+ <data>
+ AAAAAACiAAMAAQAAwA9pqQAASCsAAAAAAAABLgAAChMA
+ AL8vpD4AAAAACSD//gAAAAAAAAAA/////wABAAgAAAEu
+ AAABLQAOABoADABUAGUAcgBtAGkAbgBhAGwALgBhAHAA
+ cAAPAAgAAwBIAEQARAASACNBcHBsaWNhdGlvbnMvVXRp
+ bGl0aWVzL1Rlcm1pbmFsLmFwcAAAEwABLwD//wAA
+ </data>
+ <key>Icon</key>
+ <data>
+ SW1nUgAAAOAAAAAARkJJTAAAANQAAAACAAAAAAAAAAAA
+ xAADAAAAAMAPaakAAEgrAAAAAAAAChkAAOXqAAC/L6Pl
+ AAAAAAkg//4AAAAAAAAAAP////8AAQAUAAAKGQAAChQA
+ AAoTAAABLgAAAS0ADgAUAAkAaQBjAG8AbgAuAGkAYwBu
+ AHMADwAIAAMASABEAEQAEgBAQXBwbGljYXRpb25zL1V0
+ aWxpdGllcy9UZXJtaW5hbC5hcHAvQ29udGVudHMvUmVz
+ b3VyY2VzL2ljb24uaWNucwATAAEvAP//AAA=
+ </data>
+ <key>Name</key>
+ <string>Terminal</string>
+ </dict>
+ </array>
+ <key>MaxAmount</key>
+ <integer>10</integer>
+ </dict>
+ <key>Servers</key>
+ <dict>
+ <key>Controller</key>
+ <string>CustomListItems</string>
+ <key>CustomListItems</key>
+ <array>
+ <dict>
+ <key>Alias</key>
+ <data>
+ AAAAAABiAAMAAQAAAAAAAAAAQkRjdQAB//////////8A
+ AAAAAAAAAAAAEgD//gAAAAAAAAAA/////wAOAAgAAwBh
+ AGYAcwAPAAgAAwBhAGYAcwASAAAAEwAEL2Fmc///AAA=
+ </data>
+ <key>Name</key>
+ <string>afs</string>
+ </dict>
+ </array>
+ <key>MaxAmount</key>
+ <integer>10</integer>
+ </dict>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ay.xml
===================================================================
RCS file: regress/lib/libprop/samples/ay.xml
diff -N regress/lib/libprop/samples/ay.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ay.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AddressBarPreferencesWereConverted</key>
+ <true/>
+ <key>BuiltInBookmarksDate</key>
+ <string>2005-10-14 18:23:30 +0200</string>
+ <key>BuiltInBookmarksVersionString</key>
+ <string>5</string>
+ <key>CachedBookmarksFileDateNanoseconds</key>
+ <integer>0</integer>
+ <key>CachedBookmarksFileDateSeconds</key>
+ <integer>1152718722</integer>
+ <key>CachedBookmarksFileSize</key>
+ <integer>22048</integer>
+ <key>IEFavoritesWereImported</key>
+ <true/>
+ <key>LastVersionRun</key>
+ <string>419.3</string>
+ <key>NSToolbar Configuration SafariToolbarIdentifier</key>
+ <dict>
+ <key>TB Display Mode</key>
+ <integer>2</integer>
+ <key>TB Icon Size Mode</key>
+ <integer>1</integer>
+ <key>TB Is Shown</key>
+ <integer>1</integer>
+ <key>TB Item Identifiers</key>
+ <array>
+ <string>BackForwardToolbarIdentifier</string>
+ <string>StopOrReloadToolbarIdentifier</string>
+ <string>AddBookmarkToolbarIdentifier</string>
+ <string>InputFieldsToolbarIdentifier</string>
+ </array>
+ <key>TB Size Mode</key>
+ <integer>1</integer>
+ <key>TB Visibility Priority Values</key>
+ <dict>
+ <key>BackForwardToolbarIdentifier</key>
+ <array>
+ <integer>999</integer>
+ </array>
+ <key>InputFieldsToolbarIdentifier</key>
+ <array>
+ <integer>1000</integer>
+ </array>
+ </dict>
+ </dict>
+ <key>NSWindow Frame BrowserWindowFrame</key>
+ <string>527 106 800 772 0 0 1440 878 </string>
+ <key>NetscapeAndMozillaFavoritesWereImported</key>
+ <true/>
+ <key>OpenWindows</key>
+ <array/>
+ <key>WebIconDatabaseDirectoryDefaultsKey</key>
+ <string>~/Library/Safari/Icons</string>
+ <key>WebKitPrivateBrowsingEnabled</key>
+ <false/>
+ <key>WebKitRespectStandardStyleKeyEquivalents</key>
+ <true/>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/az.xml
===================================================================
RCS file: regress/lib/libprop/samples/az.xml
diff -N regress/lib/libprop/samples/az.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/az.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>NSColorPanelMode</key>
+ <string>6</string>
+ <key>NSColorPanelVisibleSwatchRows</key>
+ <integer>1</integer>
+ <key>NSWindow Frame NSColorPanel</key>
+ <string>491 339 201 309 0 0 1440 878 </string>
+ <key>StartupFile</key>
+ <string></string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/ba.xml
===================================================================
RCS file: regress/lib/libprop/samples/ba.xml
diff -N regress/lib/libprop/samples/ba.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/ba.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>41a4ca9c705386d3-savedcity</key>
+ <string>prague</string>
+</dict>
+</plist>
Index: regress/lib/libprop/samples/bb.xml
===================================================================
RCS file: regress/lib/libprop/samples/bb.xml
diff -N regress/lib/libprop/samples/bb.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ regress/lib/libprop/samples/bb.xml 27 Oct 2007 15:47:24 -0000
@@ -0,0 +1,8137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+ <dict>
+ <key>attachment</key>
+ <string>audio</string>
+ <key>attribute</key>
+ <string>audiobus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>audio</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>midi</string>
+ <key>attribute</key>
+ <string>midibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>midi</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>midi_pcppi</string>
+ <key>attribute</key>
+ <string>pcppi</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>midi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcppi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iic</string>
+ <key>attribute</key>
+ <string>i2cbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>piixpm</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>irframe</string>
+ <key>attribute</key>
+ <string>irbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>irframe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uirda</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>irframe</string>
+ <key>attribute</key>
+ <string>irbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>irframe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ustir</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>irframe</string>
+ <key>attribute</key>
+ <string>irbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>irframe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>oboe</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lpt_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lpt</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>7</integer>
+ <key>port</key>
+ <integer>0x378</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lpt_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lpt</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x278</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lpt_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lpt</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x3bc</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lpt_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>lpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lpt_puc</string>
+ <key>attribute</key>
+ <string>puc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>lpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>puc</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_iop</string>
+ <key>attribute</key>
+ <string>iop</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>iop</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_aac</string>
+ <key>attribute</key>
+ <string>aac</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>aac</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_amr</string>
+ <key>attribute</key>
+ <string>amr</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>amr</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_cac</string>
+ <key>attribute</key>
+ <string>cac</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cac</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_icp</string>
+ <key>attribute</key>
+ <string>icp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>icp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_twa</string>
+ <key>attribute</key>
+ <string>twa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>twa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_twe</string>
+ <key>attribute</key>
+ <string>twe</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>twe</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_mlx</string>
+ <key>attribute</key>
+ <string>mlx</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mlx</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ld_ataraid</string>
+ <key>attribute</key>
+ <string>ataraid</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ld</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ataraid</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>amhphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>amhphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bmtphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bmtphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>brgphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>brgphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tlphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tlphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>nsphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>nsphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>nsphyter</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>nsphyter</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>gentbi</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>gentbi</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>glxtphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>glxtphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>gphyter</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>gphyter</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>qsphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>qsphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>inphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>inphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iophy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iophy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>exphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>exphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lxtphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>lxtphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>makphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>makphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>icsphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>icsphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>igphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>igphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ikphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ikphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sqphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sqphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tqphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tqphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>dmphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>dmphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pnaphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pnaphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rgephy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rgephy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>urlphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>urlphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ukphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ukphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ciphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ciphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rlphy</string>
+ <key>attribute</key>
+ <string>mii</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rlphy</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aic_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>aic</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>11</integer>
+ <key>port</key>
+ <integer>0x340</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aic_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aic_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ahc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahc_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahc_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahc_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahd_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>dpt_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>dpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>dpt_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>dpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cac_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cac</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cac_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cac</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ciss_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ciss</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mlx_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mlx</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mlx_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mlx</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>icp_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>icp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>icpsp</string>
+ <key>attribute</key>
+ <string>icp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>icpsp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>icp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aac_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aac</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>adv_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>adv</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>adv_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>adv</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>adv_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>adv</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>adw_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>adw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>bha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x330</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>bha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x334</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bha_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bha_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>aha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x330</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>aha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x334</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aha_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aha_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iha_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isp_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>isp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mfi_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mfi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpt_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>njs_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>njs</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>njs_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>njs</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>siop_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>siop</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>esiop_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>esiop</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>uha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x330</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uha_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>uha</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x340</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uha_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uha</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>an_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>an</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>an_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>an</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>an_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>an</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>awi_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>awi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wi_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wi_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ath_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ath</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ath_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ath</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>atw_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>atw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>atw_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>atw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rtw_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rtw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rtw_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rtw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ral_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ral</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ral_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ral</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ural</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ral</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ep_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ex_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ex</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ex_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ex</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lc</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x320</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>le_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>le</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>le_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>le</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>le_nele</string>
+ <key>attribute</key>
+ <string>nele</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>le</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>nele</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>le_bicc</string>
+ <key>attribute</key>
+ <string>bicc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>le</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bicc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>le_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>le</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>hme_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>hme</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tr_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>tr</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd8000</integer>
+ <key>port</key>
+ <integer>0xa20</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tr_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>tr</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>port</key>
+ <integer>0xa24</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tr_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tr_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tr_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cy_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>en_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>en</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>esp_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>esp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>spc_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>spc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ntwoc_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ntwoc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fxp_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fxp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fxp_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fxp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sm_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>sm</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sm_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sm_mhzc</string>
+ <key>attribute</key>
+ <string>mhzc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mhzc</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>epic_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>epic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mbe_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mbe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x280</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ne_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ne</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>4</integer>
+ <key>port</key>
+ <integer>0x3f8</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>3</integer>
+ <key>port</key>
+ <integer>0x2f8</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x3e8</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_puc</string>
+ <key>attribute</key>
+ <string>puc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>puc</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_pcmcom</string>
+ <key>attribute</key>
+ <string>pcmcom</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcom</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_xirc</string>
+ <key>attribute</key>
+ <string>xirc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>xirc</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>com_mhzc</string>
+ <key>attribute</key>
+ <string>mhzc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>com</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mhzc</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pckbc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pckbc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pckbc_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pckbc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>attimer_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>attimer</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>attimer_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>attimer</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ug_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ug</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>esh_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>esh</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_cmpci</string>
+ <key>attribute</key>
+ <string>cmpci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>flags</key>
+ <integer>0x1</integer>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cmpci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_eso</string>
+ <key>attribute</key>
+ <string>eso</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eso</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_ess</string>
+ <key>attribute</key>
+ <string>ess</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ess</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_fms</string>
+ <key>attribute</key>
+ <string>fms</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>fms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_sb</string>
+ <key>attribute</key>
+ <string>sbdsp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>sb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_sv</string>
+ <key>attribute</key>
+ <string>sv</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>sv</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_wss</string>
+ <key>attribute</key>
+ <string>wss</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>wss</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_yds</string>
+ <key>attribute</key>
+ <string>yds</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>yds</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>opl_ym</string>
+ <key>attribute</key>
+ <string>ym</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>opl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ym</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_cmpci</string>
+ <key>attribute</key>
+ <string>cmpci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cmpci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_eso</string>
+ <key>attribute</key>
+ <string>eso</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eso</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_fms</string>
+ <key>attribute</key>
+ <string>fms</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>fms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_sb</string>
+ <key>attribute</key>
+ <string>sbdsp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>sb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_yds</string>
+ <key>attribute</key>
+ <string>yds</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>yds</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mpu_ym</string>
+ <key>attribute</key>
+ <string>ym</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ym</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rtk_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rtk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rtk_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rtk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>re_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>re</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wdc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>wdc</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>14</integer>
+ <key>port</key>
+ <integer>0x1f0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wdc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>wdc</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>15</integer>
+ <key>port</key>
+ <integer>0x170</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wdc_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wdc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wdc_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wdc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>atabus</string>
+ <key>attribute</key>
+ <string>ata</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>atabus</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahcisata_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahcisata</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>jmahci</string>
+ <key>attribute</key>
+ <string>jmide_hl</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahcisata</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>jmide</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tlp_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tlp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tlp_eisa</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tlp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tlp_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tlp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sf_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sf</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>we_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>we</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x280</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>we_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>we</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xcc000</integer>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>we_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>we</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ate_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ate</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x2a0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ate_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ate</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fmv_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>fmv</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x2a0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fmv_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fmv</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cs_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>cs</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cs_pcmcia</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cs</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>hpet_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>hpet</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>vga_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>vga</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>vga_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>vga</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhci_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhci_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ohci_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ohci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ohci_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ohci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ehci_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ehci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ehci_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ehci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mtd_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mtd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>radio</string>
+ <key>attribute</key>
+ <string>radiodev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>radio</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>udsbr</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>radio</string>
+ <key>attribute</key>
+ <string>radiodev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>radio</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bktr</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fwohci_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fwohci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fwohci_cardbus</string>
+ <key>attribute</key>
+ <string>cardbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fwohci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>spic_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>spic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>joy_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>joy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>joy_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>joy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>joy_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>joy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>joy_eso</string>
+ <key>attribute</key>
+ <string>eso</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>joy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eso</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>gpio</string>
+ <key>attribute</key>
+ <string>gpiobus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>gpio</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>elansc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ioapic</string>
+ <key>attribute</key>
+ <string>ioapicbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ioapic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>scsibus</string>
+ <key>attribute</key>
+ <string>scsi</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>scsibus</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>atapibus</string>
+ <key>attribute</key>
+ <string>atapi</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>atapibus</string>
+ <key>locators</key>
+ <dict/>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cd</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cd</string>
+ <key>attribute</key>
+ <string>atapibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>atapibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ch</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ch</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sd</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sd</string>
+ <key>attribute</key>
+ <string>atapibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>atapibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>st_scsibus</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>st</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>st_atapibus</string>
+ <key>attribute</key>
+ <string>atapibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>st</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>atapibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ses</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ses</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ss</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ss</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uk</string>
+ <key>attribute</key>
+ <string>scsibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>scsibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uk</string>
+ <key>attribute</key>
+ <string>atapibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>atapibus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wd</string>
+ <key>attribute</key>
+ <string>ata_hl</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>atabus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wd</string>
+ <key>attribute</key>
+ <string>ata_hl</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>umass</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iop_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iop</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iopsp</string>
+ <key>attribute</key>
+ <string>iop</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iopsp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>iop</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>dpti</string>
+ <key>attribute</key>
+ <string>iop</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>dpti</string>
+ <key>locators</key>
+ <dict>
+ <key>tid</key>
+ <integer>0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>iop</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mainbus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pci</string>
+ <key>attribute</key>
+ <string>pcibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pci</string>
+ <key>attribute</key>
+ <string>pcibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pchb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pci</string>
+ <key>attribute</key>
+ <string>pcibus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ppb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>twe</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>twe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>twa</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>twa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>amr</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>amr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mly</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mly</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcscp</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcscp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fpa</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fpa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcn</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcn</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>trm</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>trm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pciide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pciide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acardide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acardide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aceride</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aceride</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>artsata</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>artsata</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cmdide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cmdide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cypide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cypide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>geodeide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>geodeide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>hptide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>hptide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iteide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iteide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>jmide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>jmide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>optiide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>optiide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>piixide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>piixide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pdcsata</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pdcsata</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pdcide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pdcide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rccide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rccide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>svwsata</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>svwsata</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>satalink</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>satalink</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>siside</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>siside</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>slide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>slide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>viaide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>viaide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>stpcide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>stpcide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ixpide</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ixpide</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ppb</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ppb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cz</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cz</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tl</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lmc</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>lmc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bktr</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bktr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>clcs</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>clcs</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>clct</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>clct</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fms</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fms</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>eap</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>eap</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>auacer</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>auacer</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>auich</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>auich</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>auvia</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>auvia</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>auixp</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>auixp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>azalia</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>azalia</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>neo</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>neo</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>esa</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>esa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>eso</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>eso</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>esm</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>esm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sv</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sv</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cmpci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cmpci</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>yds</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>yds</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>emuxki</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>emuxki</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>autri</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>autri</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>puc</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>puc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>vr</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>vr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sip</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sip</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>gsip</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>gsip</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>stge</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>stge</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wm</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bge</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bge</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bnx</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bnx</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ti</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ti</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ste</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ste</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cbb_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cbb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>piixpm</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>piixpm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>amdpm</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>amdpm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>hifn</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>hifn</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ubsec</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ubsec</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>oboe</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>oboe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>weasel_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>weasel</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>txp</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>txp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>skc</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>skc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sk</string>
+ <key>attribute</key>
+ <string>skc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>skc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bce</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bce</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>dge</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>dge</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ipw</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ipw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iwi</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>iwi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wpi</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wpi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>xge</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>xge</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>vge</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>vge</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>nfe</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>nfe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mskc</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mskc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>msk</string>
+ <key>attribute</key>
+ <string>mskc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>msk</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mskc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>agp</string>
+ <key>attribute</key>
+ <string>agpbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>agp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pchb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pchb</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pchb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>elansc</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>elansc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>geodegcb</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>geodegcb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>geodewdog</string>
+ <key>attribute</key>
+ <string>geodegcb</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>geodewdog</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>geodegcb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>geodecntr</string>
+ <key>attribute</key>
+ <string>geodegcb</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>geodecntr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>geodegcb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pceb</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pceb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcib</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcib</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>piixpcib</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>piixpcib</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcmb</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcmb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isa</string>
+ <key>attribute</key>
+ <string>isabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>isa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>piixpcib</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isa</string>
+ <key>attribute</key>
+ <string>isabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>isa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isa</string>
+ <key>attribute</key>
+ <string>isabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>isa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pceb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isa</string>
+ <key>attribute</key>
+ <string>isabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>isa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcib</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sea</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>sea</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xc8000</integer>
+ <key>irq</key>
+ <integer>5</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wds</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>wds</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>6</integer>
+ <key>irq</key>
+ <integer>15</integer>
+ <key>port</key>
+ <integer>0x350</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wds</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>wds</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>5</integer>
+ <key>irq</key>
+ <integer>11</integer>
+ <key>port</key>
+ <integer>0x358</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ec</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ec</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd8000</integer>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x250</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>eg</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>eg</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x280</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>el</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>el</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>iy</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>iy</string>
+ <key>locators</key>
+ <dict>
+ <key>port</key>
+ <integer>0x360</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>nele</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>nele</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>7</integer>
+ <key>irq</key>
+ <integer>9</integer>
+ <key>port</key>
+ <integer>0x320</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bicc</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>bicc</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>7</integer>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x320</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ef</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ef</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>irq</key>
+ <integer>7</integer>
+ <key>port</key>
+ <integer>0x360</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ai</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ai</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>irq</key>
+ <integer>7</integer>
+ <key>port</key>
+ <integer>0x360</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ix</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>ix</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x300</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sb_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>sb</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>1</integer>
+ <key>drq2</key>
+ <integer>5</integer>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x220</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sb_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pas</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pas</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>1</integer>
+ <key>irq</key>
+ <integer>7</integer>
+ <key>port</key>
+ <integer>0x220</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wss_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>wss</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>0</integer>
+ <key>drq2</key>
+ <integer>1</integer>
+ <key>irq</key>
+ <integer>10</integer>
+ <key>port</key>
+ <integer>0x530</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wss_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wss</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wss_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wss</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ess_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ess</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ym_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ym</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ym_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ym</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>gus</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>gus</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>1</integer>
+ <key>drq2</key>
+ <integer>6</integer>
+ <key>irq</key>
+ <integer>7</integer>
+ <key>port</key>
+ <integer>0x220</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcdisplay</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcdisplay</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcppi</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcppi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcppi_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcppi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>isapnp</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>isapnp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>guspnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>guspnp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>npx_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>npx</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>13</integer>
+ <key>port</key>
+ <integer>0xf0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>npx_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>npx</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lms</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lms</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x23c</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>lms</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>lms</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x238</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mms</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>mms</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x23c</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mms</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>mms</string>
+ <key>locators</key>
+ <dict>
+ <key>irq</key>
+ <integer>5</integer>
+ <key>port</key>
+ <integer>0x238</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsdisplay_emul</string>
+ <key>attribute</key>
+ <string>wsemuldisplaydev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsdisplay</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>vga</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsdisplay_emul</string>
+ <key>attribute</key>
+ <string>wsemuldisplaydev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsdisplay</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcdisplay</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wskbd</string>
+ <key>attribute</key>
+ <string>wskbddev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wskbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pckbd</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wskbd</string>
+ <key>attribute</key>
+ <string>wskbddev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wskbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ukbd</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wskbd</string>
+ <key>attribute</key>
+ <string>wskbddev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wskbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>btkbd</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>spic</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ums</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uep</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>btms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>lms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>wsmouse</string>
+ <key>attribute</key>
+ <string>wsmousedev</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>wsmouse</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mms</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pckbd</string>
+ <key>attribute</key>
+ <string>pckbport</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pckbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pckbc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pms</string>
+ <key>attribute</key>
+ <string>pckbport</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pms</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pckbc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sysbeep</string>
+ <key>attribute</key>
+ <string>pcppi</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>sysbeep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcppi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fdc_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>fdc</string>
+ <key>locators</key>
+ <dict>
+ <key>drq</key>
+ <integer>2</integer>
+ <key>irq</key>
+ <integer>6</integer>
+ <key>port</key>
+ <integer>0x3f0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fd</string>
+ <key>attribute</key>
+ <string>fdc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>fdc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>eisa</string>
+ <key>attribute</key>
+ <string>eisabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>eisa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>eisa</string>
+ <key>attribute</key>
+ <string>eisabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>eisa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pceb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ahb</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ahb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fea</string>
+ <key>attribute</key>
+ <string>eisa</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fea</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>eisa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mca</string>
+ <key>attribute</key>
+ <string>mcabus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>mca</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>elmc_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>elmc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>edc_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>edc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ed_mca</string>
+ <key>attribute</key>
+ <string>edc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ed</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>edc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tra_mca</string>
+ <key>attribute</key>
+ <string>mca</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>tra</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mca</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpiapm</string>
+ <key>attribute</key>
+ <string>acpiapmbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>apm</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cpu</string>
+ <key>attribute</key>
+ <string>cpubus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cpu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cardslot</string>
+ <key>attribute</key>
+ <string>pcmciaslot</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cardslot</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cbb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cardbus</string>
+ <key>attribute</key>
+ <string>cbbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cardbus</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardslot</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcic_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcic</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>iosiz</key>
+ <integer>0x10000</integer>
+ <key>port</key>
+ <integer>0x3e0</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcic_pci</string>
+ <key>attribute</key>
+ <string>pci</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcic_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcic</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xe0000</integer>
+ <key>iosiz</key>
+ <integer>0x4000</integer>
+ <key>port</key>
+ <integer>0x3e2</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x1</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcic_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>pcic</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xe0000</integer>
+ <key>iosiz</key>
+ <integer>0x4000</integer>
+ <key>port</key>
+ <integer>0x3e4</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x2</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcic_isapnp</string>
+ <key>attribute</key>
+ <string>isapnp</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcic</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>isapnp</string>
+ <key>unit</key>
+ <integer>0x3</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>tcic_isa</string>
+ <key>attribute</key>
+ <string>isa</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>tcic</string>
+ <key>locators</key>
+ <dict>
+ <key>iomem</key>
+ <integer>0xd0000</integer>
+ <key>iosiz</key>
+ <integer>0x10000</integer>
+ <key>port</key>
+ <integer>0x240</integer>
+ </dict>
+ <key>parent-driver</key>
+ <string>isa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcmcia</string>
+ <key>attribute</key>
+ <string>pcmciabus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcmcia</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcic</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcmcia</string>
+ <key>attribute</key>
+ <string>pcmciabus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcmcia</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>tcic</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcmcia</string>
+ <key>attribute</key>
+ <string>pcmciabus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcmcia</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>cardslot</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>pcmcom</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>pcmcom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cnw</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cnw</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>mhzc</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>mhzc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ray</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ray</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>xirc</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>xirc</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>xi_xirc</string>
+ <key>attribute</key>
+ <string>xirc</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>xi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>xirc</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bt3c</string>
+ <key>attribute</key>
+ <string>pcmcia</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bt3c</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>pcmcia</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>usb</string>
+ <key>attribute</key>
+ <string>usbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>usb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ehci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>usb</string>
+ <key>attribute</key>
+ <string>usbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>usb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ohci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>usb</string>
+ <key>attribute</key>
+ <string>usbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>usb</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhub</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhub</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>usb</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhub</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhub</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uaudio</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uaudio</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>umidi</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>umidi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>umodem</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ubsa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uftdi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uipaq</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>umct</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uplcom</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uslsa</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uvscom</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uvisor</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucom</string>
+ <key>attribute</key>
+ <string>ucombus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ukyopon</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ugen</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ugen</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhidev</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhidev</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uhid</string>
+ <key>attribute</key>
+ <string>uhidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uhid</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ukbd</string>
+ <key>attribute</key>
+ <string>uhidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ukbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ums</string>
+ <key>attribute</key>
+ <string>uhidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ums</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uep</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uep</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ucycom</string>
+ <key>attribute</key>
+ <string>uhidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ucycom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ulpt</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ulpt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>umass</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>umass</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uirda</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uirda</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ustir</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ustir</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ubt</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ubt</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>urio</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>urio</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uvisor</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uvisor</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uyap</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uyap</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>udsbr</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>udsbr</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aue</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aue</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cdce</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cdce</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>cue</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>cue</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>kue</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>kue</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>upl</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>upl</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>url</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>url</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>axe</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>axe</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>udav</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>udav</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>umodem</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>umodem</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uftdi</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uftdi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uplcom</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uplcom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>umct</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>umct</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uvscom</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uvscom</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ubsa</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ubsa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uipaq</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uipaq</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ukyopon</string>
+ <key>attribute</key>
+ <string>usbifif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ukyopon</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uslsa</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uslsa</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>uscanner</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>uscanner</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>usscanner</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>usscanner</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>atu</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>atu</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>rum</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>rum</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>utoppy</string>
+ <key>attribute</key>
+ <string>usbdevif</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>utoppy</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>uhub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bthub</string>
+ <key>attribute</key>
+ <string>btbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bthub</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bt3c</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bthub</string>
+ <key>attribute</key>
+ <string>btbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bthub</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>btuart</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bthub</string>
+ <key>attribute</key>
+ <string>btbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bthub</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ubt</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>bthidev</string>
+ <key>attribute</key>
+ <string>bthub</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>bthidev</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bthub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>btkbd</string>
+ <key>attribute</key>
+ <string>bthidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>btkbd</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bthidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>btms</string>
+ <key>attribute</key>
+ <string>bthidbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>btms</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bthidev</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>btsco</string>
+ <key>attribute</key>
+ <string>bthub</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>btsco</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>bthub</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>ieee1394if</string>
+ <key>attribute</key>
+ <string>fwbus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>ieee1394if</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>fwohci</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>fwip</string>
+ <key>attribute</key>
+ <string>ieee1394if</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>fwip</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ieee1394if</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sbp</string>
+ <key>attribute</key>
+ <string>ieee1394if</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sbp</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>ieee1394if</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpi</string>
+ <key>attribute</key>
+ <string>acpibus</string>
+ <key>clonable</key>
+ <false/>
+ <key>driver</key>
+ <string>acpi</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>mainbus</string>
+ <key>parent-unit</key>
+ <integer>0x0</integer>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpiec</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpiec</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpilid</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpilid</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpibut</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpibut</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpiacad</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpiacad</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpibat</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpibat</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>acpitz</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>acpitz</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>aiboost</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>aiboost</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>vald_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>vald</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+ <dict>
+ <key>attachment</key>
+ <string>sony_acpi</string>
+ <key>attribute</key>
+ <string>acpinodebus</string>
+ <key>clonable</key>
+ <true/>
+ <key>driver</key>
+ <string>sony</string>
+ <key>locators</key>
+ <dict/>
+ <key>parent-driver</key>
+ <string>acpi</string>
+ <key>unit</key>
+ <integer>0x0</integer>
+ </dict>
+</array>
+</plist>